生产环境访问第三方服务,偶现org.apache.http.NoHttpResponseException
原因:
HttpClient 默认使用长连接+连接池。
Http客户端无法及时响应服务端关闭连接,这次如果继续使用这条连接去请求服务端就会导致 org.apache.http.NoHttpResponseException。
虽然HttpClient采取了很多方式避免这种情况,例如请求前会校验超时时间、会读socket检测连接是否还在,但是边界情况总是无法避免(这一刻判断连接可用后,在请求发出去后,接收响应时又被断开了)
解决方案:
1.HttpClient支持配置重试策略HttpRequestRetryHandler ,当出现org.apache.http.NoHttpResponseException异常时重试请求。(顺丰的接口镔璟已经加过了,目前有调用顺丰外卖的接口偶尔会爆org.apache.http.NoHttpResponseException异常,但是都会重试)
2.改成短连接的方式请求