Как использовать пул соединений `clj-http` из кольцевого веб-приложения?

Я использую веб-приложение clojure в качестве прокси-веб-сервера.

Все мои запросы поступают в это веб-приложение, поэтому я использую 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 с этим соединением бассейн?

1 ответ

Решение

Реализуйте промежуточное ПО, которое добавляет диспетчер соединений в карту запросов.

Вам нужно будет обрабатывать жизненный цикл диспетчера соединений самостоятельно, а не с помощью формы - см. Заключительную часть документации clj-http о постоянных соединениях.

Другие вопросы по тегам