Это исключение, вызванное HTTP, которое является случайным исключением.
журнал исключений
org.apache.http.NoHttpResponseException: The target server failed to respond
решение
серверное решение
Клиент может обнаружить, что срок действия службы истек, и автоматически закрыть ее.
- Из кода отслеживания видно, что клиент читает Keep-Alive: timeout=xx из HttpHeader. Если он не прочитан, время ожидания никогда не истечет.
- Второй параметр конфигурации Nginx таков, поэтому, пока сервер меняет keepalive_timeout 30s; на keepalive_timeout 30s 29s; здесь на 1с меньше, чтобы предотвратить проблемы параллелизма, вызванные сетевой задержкой.
Сценарий клиента
Если сервер не удобно модифицировать, то второе решение — модифицировать клиентскую часть, что более хлопотно.
- Обязательно используйте последнюю
httpClient. - Тогда есть три метода:
- за
jestтакое времяcloseIdleConnection, время планирования можно настроить наkeep aliveменее половины времени, чтобы гарантировать переработку до тайм-аута - в соответствии с
keep Aliveкорректировка времениvalidateAfterInactivity 小于keepAlive Time`, но этот метод все равно не может не закрыться при этом. - Схема компенсации, используя
RetryПопробуйте отправить еще раз.HttpClientПо умолчанию открыт автоматический повтор, не звонить.disableAutomaticRetriesПросто
- за
Рекомендуемое решение
- Клиент использует короткое соединение, такое как переход на
UrlConnection; - будет
HttpClientВремя поддержания соединения настроено менее чем на 15 с илиnginxизkeepalive_timeoutнастроить более 30 с; - Не нужно
PoolingHttpClientConnectionManager; - Повторите попытку после ошибки,
HttpClientизRetryHandler; - JDK11 принес
HttpClinet, разве это не привлекательно?