一、背景
线上有个支付网关项目,突然发现大量httpclient报错,该httpclient报错是我们主动访问第三方时,报获取连接超时错误。而且都是同一个第三方渠道报错,而其他第三方都没有这个报错。
走查代码发现,所有的http访问,用的都是同一个httpclient。而因为某个第三方渠道报错,导致连接没有被释放,所以再次访问该渠道的时候就没有连接了。那为什么其他共用该httpclient的渠道没有收到影响呢?这就要讲一下下面几个参数了。
二、HttpClient的几个重要参数
MaxtTotal:整个连接池的大小
CONNECTION_TIMEOUT : 连接超时,指的是建立连接的超时时间
SO_TIMEOUT : 响应超时,连接建立以后,响应的超时时间
CONN_MANAGER_TIMEOUT: 连接不够的时候超时时间
DefaultMaxPerRoute:每个host的连接最大连接数,因为这个参数,所以某个渠道出问题以后,其他渠道的最大连接数不会有影响。(当然这个还是回到maxTotal最大连接池的限制)
设置http client的重试次数,默认是3次,最好还是禁用
httpClient.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));
还有更多的注意,请大神指教。
// TODO
网友评论