Это исключение, вызванное 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
, разве это не привлекательно?