#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()
явно не вызывается для завершения.
Таким образом, становится жизненно важным описать ваши значения времени ожидания чтения и тайм-аута подключения, и таким образом вы ограничиваете свое соединение определенными вами ограничениями.
Надеюсь, это поможет.