Спрингс RestTemplate пул соединений по умолчанию
Просто интересно, если RestTemplate из коробки использует пул соединений или просто устанавливает новое соединение каждый раз?
Ответы
Ответ 1
Я считаю, что RestTemplate
не использует пул соединений для отправки запросов, он использует SimpleClientHttpRequestFactory
, который оборачивает стандартное JDK
HttpURLConnection
открытие и закрытие соединения.
На самом деле вы можете настроить RestTemplate
для использования объединенной реализации, такой как HttpComponentsClientHttpRequestFactory
, но, скорее всего, вам также может понадобиться настроить некоторые параметры, чтобы предотвратить тайм-аут запросов.
Я написал в блоге об этой проблеме на Устранении проблем Spring RestTemplate Тайм-аут запросов
Ответ 2
По умолчанию RestTemplate создает новое Httpconnection каждый раз и закрывает соединение после его завершения.
Если вам нужен пул соединений в шаблоне отдыха, вы можете использовать другую реализацию ClientHttpRequestFactory, которая объединяет соединения.
new RestTemplate(new HttpComponentsClientHttpRequestFactory())
Ответ 3
Да, Spring RestTemplateBuilder использует Apache httpclient для объединения (использование).
RestTemplateBuilder создает HttpComponentsClientHttpRequestFactory и использует HttpClientBuilder. HttpClientBuilder - самый интересный (источник):
s = System.getProperty("http.maxConnections", "5");
int max = Integer.parseInt(s);
poolingmgr.setDefaultMaxPerRoute(max);
poolingmgr.setMaxTotal(2 * max);
Итак, по умолчанию размер пула на маршрут (хост) равен 5. Общий размер пула = 10.
Чтобы проверить ведение журнала пула соединений, установите уровень ведения журнала следующим образом:
org.apache.http.impl.conn.PoolingHttpClientConnectionManager=TRACE
Ответ 4
Мы можем использовать okhttpclient под шаблоном отдыха пружины, чтобы использовать пул соединений. Подробный блог об этом ниже
https://www.bytesville.com/changing-httpclient-in-spring-resttemplate/