#java #spring #resttemplate #connection-timeout #socket-timeout-exception
#java #весна #resttemplate #время ожидания соединения #сокет-тайм-аут-исключение
Вопрос:
Я использую Spring RestTemplate
и HTTP-фабрику, которую я использую с ним HttpComponentsClientHttpRequestFactory
.
Я испытывал много застрявших потоков при выполнении HTTP-вызовов из-за проблем с вызываемым сервером. Итак, я настроил тайм-аут чтения, а также тайм-аут соединения с помощью my HttpComponentsClientHttpRequestFactory
.
Это помогло, но только до некоторой степени, теперь я вижу, что вместо того, чтобы все потоки зависали сразу, по крайней мере, некоторое начальное количество потоков прошло успешно, но я заметил, что через некоторое время мои потоки снова застряли с HTTP-вызовом.
Вот мои вопросы:
- Поскольку у меня есть как тайм-аут чтения, так и тайм-аут соединения, есть мысли о том, почему я все еще получаю потоки, застрявшие при HTTP-вызове на основе RestTemplate?
- Моя собственная мысль заключается в том, что запрос теряется в сети, я знаю, что это теоретически возможно, но возможно ли это практически в моем случае?
- Я искал и обнаружил, что могу установить
sun.net.client.defaultConnectTimeout
иsun.net.client.defaultReadTimeout
на уровне JVM, поскольку я уже использую тайм-ауты с моимHttpComponentsClientHttpRequestFactory
, окажет ли это какое-либо значимое влияние?
Любые другие мысли или рекомендации о том, как я могу решить эту проблему, будут оценены.
Код находится в виртуальной машине, так что это лучшее, что я могу сделать:
Комментарии:
1. Вероятно, было бы полезно, если бы вы могли показать нам код, включающий
HttpComponentsClientHttpRequestFactory
и устанавливающий значения тайм-аута.2. @CryptoFool: готово, пожалуйста, проверьте.
3. @pjj привет, похоже, у меня такая же проблема. У меня есть приложение Spring Boot, которое вызывает набор различных служб с помощью RestTemplate. Одним из таких сервисов является ElasticSearch. По какой-то причине у меня периодически возникают зависшие вызовы, которые заканчиваются исключениями тайм-аута. Но если я выполняю вызовы с помощью curl, у меня 100% успех. Какая-нибудь удача с проблемой?
4. @Dmytro: Nops..
5. Привет, pjj, я могу подтвердить, что проблема была либо в HttpClient apache, либо в HttpComponentsClientHttpRequestFactory от Spring. После изменения на SimpleClientHttpRequestFactory, который использует java.net.HttpURLConnection и проверки в производстве в течение нескольких месяцев, я могу подтвердить, что у меня не было ошибок тайм-аута