1

我想将网络请求“重定向”到另一个服务。我不想改变它们并将它们发送到另一个服务(我假设使用 http-clj 之类的东西)。然后结果将执行相同的跃点。

这是必需的,因为我们正在替换部分服务,但我们不能让客户端直接调用服务。

我们部署到一个 tomcat 中,但通常它应该适用于任何 Ring Request。

有没有一种优雅的方法来做到这一点?

谢谢

4

3 回答 3

3

这不是特定于 Ring 的答案,但我觉得您最好在旧 Web 服务和新的替代 Web 服务之前使用像Nginx这样的反向代理。

反向代理可以轻松响应不同的传入 URL,并将它们透明地传递到幕后的正确 Web 服务。这是一种灵活而强大的方法,随着服务的增长,它将允许许多分区的 URL 方案变体。

于 2017-05-17T15:50:52.897 回答
0

多年来,我一直在处理请求进来的情况下,它需要去两个不同的地方。(在这里对微服务和意外后果的法则进行排队咆哮)我通常选择将 core.async 与 http-kit 一起使用的模式。

(handler .....
   (let [output (chan)]
      (http/post bakcend-url (make-new-request-options request)
                 #(do (async/>!! output %)
                      (async/close! output)))
      (go (async/<! (async/timeout 2000))
          (async/>! output {:status 500}))
     ... )
于 2017-05-18T18:21:16.030 回答
0

最简单的方法可能只是返回带有正确 Location 标头的 301 Moved Permanently 响应。

如果你想实际执行请求,你基本上是在实现一个 HTTP 代理,这可能会很快变得复杂,你最好使用像 Scott 说的 Nginx 这样的反向代理

于 2018-11-16T13:58:33.433 回答