Настройка времени ожидания соединения с помощью resttemplate с использованием CloseableHttpClient

#spring #httpclient #resttemplate

#spring #httpclient #resttemplate

Вопрос:

Итак, я прочитал эту статью https://www.baeldung.com/httpclient-timeout и в нем говорится, что тайм-аут подключения увеличивает его собственный штраф, если DNS базовой службы, к которой пытается подключиться httpclient, имеет настроенные для него несколько IP-адресов.

Итак, если у меня установлен тайм-аут соединения в 100 мс, а DNS вызываемой службы имеет 5 IP-адресов, сопоставленных с ним, то я рассматриваю максимальный тайм-аут соединения в 500 мс, предполагая, что работает последний IP.

Есть ли способ ограничить этот тайм-аут соединения, независимо от того, какова топология базовой службы, поскольку я клиент, я всегда буду не зависимым от этого.

Ответ №1:

Насколько я понял, у вас нет кодового варианта для запуска в ситуации с 5 или более IP-адресами, скорее любопытство. Итак, вот мой опыт :

Поскольку вы используете RestTemplate который по умолчанию использует SimpleClientHttpRequestFactory . И по мере того, как истекает время определения соединения :

Тайм-аут соединения — это тайм-аут при установлении начального соединения; т. е. завершение подтверждения связи TCP и подключение к запрошенному серверу.

Итак, что касается теории: независимо от базовой топологии сервиса, RestTemplate попытается установить соединение в соответствии со значением тайм-аута соединения.

И для того, чтобы выяснить almost exact timeout в вашем случае, вы должны выполнить некоторый тест задержки, напечатать разницу во времени, которая restTemplate требуется для получения 200 OK .

Кроме того, SimpleClientHttpRequestFactory внутренне используется HttpURLConnection тайм-аут по умолчанию, равный infinite (0 /-1).

Да, это также наблюдалось в редких случаях, соединение продолжает попытки, если Thread.interrupt() явно не вызывается для завершения.

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

Надеюсь, это поможет.