首页 > 解决方案 > 如何使用环形 Web 应用程序中的“clj-http”连接池?

问题描述

我正在使用 clojure Web 应用程序作为代理 Web 服务器。

我的所有请求都进入了这个 clojure ring web 应用程序,然后我使用clj-http将请求发送到最终目的地。

因此,到目前为止,我将此作为一个简单的解决方案工作,只需要调用clj-http/request每个请求。这段代码与我正在做的极其相似

但这还不够好,因为每次发出请求时,都会初始化一个新的 http 客户端。我需要连接池,以便正确重用 http 客户端。

关于持久连接的clj-http 文档指出,您可以像这样重用连接:

(with-connection-pool {:timeout 5 :threads 4 :insecure? false :default-per-route 10}
  (get "http://example.org/1")
  (post "http://example.org/2")
  (get "http://example.org/3")
  ...
  (get "http://example.org/999"))

也许我对 clojure 还不够好,但是有人如何通过这个连接来包围所有进入https://github.com/tailrecursion/ring-proxy/blob/master/src/tailrecursion/ring_proxy.clj#L40的请求水池?

标签: clojureconnection-poolingclj-http

解决方案


实现一个将连接管理器添加到请求映射中的中间件。

您将需要自己处理连接管理器的生命周期,而不是使用表单 - 请参阅 clj-http 文档的最后一部分关于持久连接。


推荐阅读