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

Nicholas DiPiazza спросил: 13 июня 2018 в 08:07 в: clojure

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

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

Есть решение
pete23 ответил: 14 июня 2018 в 07:21

Внедрение промежуточного программного обеспечения, которое добавляет диспетчер подключений в карту запросов.

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

Nicholas DiPiazza ответил: 14 июня 2018 в 11:44
Эй, пей, да, это тоже мой коллега, когда они увидели этот вопрос. Я не так хорош в clojure, знаете ли вы какие-либо примеры, которые могли бы показать это в действии? Очень плохо, что этот раздел документации clj-http github.com/dakrone/clj-http#custom-middleware не дает примера. я создам его, если смогу. И что вы имели в виду под You will need to handle the lifecycle of the connection manager yourself rather than the with- form -, я не понял этого
Nicholas DiPiazza ответил: 14 июня 2018 в 11:58
черт возьми, я вижу это сейчас. я пропустил последний раздел области постоянных подключений, как вы сказали. понял!