从Ring Request创建新的HTTP调用

时间:2017-05-17 15:12:39

标签: clojure ring immutant

我想重定向' web请求到另一个服务。我想不改变它们并将它们发送到另一个服务(我假设使用像http-clj这样的东西)。结果将执行相同的跳跃。

这是必需的,因为我们正在替换部分服务,但我们无法直接使用客户呼叫服务。

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

有优雅的方法吗?

由于

3 个答案:

答案 0 :(得分:3)

这不是特定于戒指的答案,但我觉得你最好在两个人面前使用反向代理,例如 Nginx 您的旧网络服务和新的替代网络服务。

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

答案 1 :(得分:0)

我多年来一直在这样做的情况下,请求进入它需要去两个不同的地方。 (在这里排队关于微服务和意外后果的法则)我一般都决定使用带有http-kit的core.async模式。

(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}))
     ... )

答案 2 :(得分:0)

最简单的方法可能只是返回带有正确的Location标头的301移动永久响应。

如果您想实际执行请求,则基本上是在实现HTTP代理,这可能会很快变得非常复杂,并且最好使用像Scott所说的Nginx之类的反向代理