这是HTTP引起的异常,属于偶然发生异常。
异常日志
org.apache.http.NoHttpResponseException: The target server failed to respond
复制代码
解决方案
服务端方案
客户端可以检测到服务已经过期了,主动关闭。
-
追踪代码我们可以看到是 client 是从 HttpHeader 中读取 Keep-Alive: timeout=xx,如果没有读到就认为永不超时。
-
而 Nginx 配置的第二个参数就是这个,因此只要服务端将 keepalive_timeout 30s;改为 keepalive_timeout 30s 29s;即可,这里少 1s 为了防止网络延时造成的并发问题。
客户端方案
如果服务端不方便修改,那么第二方案是客户端这边修改,比较麻烦。
-
首先保证用最新的
httpClient
。 -
其次有三种方法:
-
jest closeIdleConnection keep alive
-
Retry HttpClient disableAutomaticRetries
-
推荐的方案
-
HttpClient nginx keepalive_timeout
-
不用
PoolingHttpClientConnectionManager
; -
出错后重试,
HttpClient
的RetryHandler
; -
JDK11已经带了
HttpClinet
,这不吸引人么?
原文
https://juejin.im/post/5ef99141e51d4534bd34aace
本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 【每日鲜蘑】异常`org.apache.http.NoHttpResponseException`解决