Несколько WebClients (Spring webflux) для нескольких хостов - PullRequest
0 голосов
/ 26 февраля 2019

В моем приложении я вызываю 4 разных API (все на разных хостах).Я хотел бы иметь отдельный пул соединений для каждого хоста и других параметров (например, поддерживать в живых и т. Д.).Могу ли я добиться этого с помощью одного WebClient или мне для этого нужно 4 разных экземпляра WebClient?

Кроме того, имеет ли смысл иметь отдельный пул соединений для каждого хоста?Если нет, могу ли я добиться этого, используя один WebClient?

1 Ответ

0 голосов
/ 26 февраля 2019

Это действительно зависит от базовой библиотеки HTTP, используемой Spring WebFlux.В настоящий момент Spring поддерживает Reactor Netty (по умолчанию) и клиент Jetty.

По умолчанию WebClient будет иметь один пул соединений;соединения повторно используются на основе ключа хоста + порта, и reactor.netty.resources.ConnectionProvider будет эластичным, что означает, что он никогда не будет ждать открытия нового соединения.Вы можете настроить свое собственное и установить максимальное количество подключений к фиксированному значению.

Насколько я знаю, keepAlive и все параметры, связанные с TCP, обрабатываются на уровне TCP с помощью io.netty.channel.ChannelOption.Я не думаю, что вы можете изменить их для каждого хоста или для пула соединений, поскольку они принадлежат ресурсам цикла событий.

Другие клиенты, такие как Jetty, могут предоставлять другие варианты, ноЯ предполагаю, что вы используете здесь значение по умолчанию.

Я не вижу веской причины иметь пул соединений на хост.Обычно мы стремимся достичь максимального использования ресурсов.Например, в Spring Boot мы автоматически настраиваем параметры, чтобы сервер и клиент (в одном приложении) повторно использовали одни и те же ресурсы.Поскольку некоторые из них привязаны к числу ядер ЦП, повторное использование одних и тех же повышает общую эффективность.

Существует множество вариантов, связанных с TCP, и, если у вас нет особой проблемы, которую нужно решить, я думаю, что по умолчаниюследует сохранить, как много мыслей было вложено в них.

...