版本:4.4.1
HttpClient默认使用的连接池为PoolingHttpClientConnectionManager, connect()方法会使用SocketConfig配置参数
SocketConfig socketConfig = this.configData.getSocketConfig(host); if (socketConfig == null) { // 使用配置参数SocketConfig socketConfig = this.configData.getDefaultSocketConfig(); } if (socketConfig == null) { socketConfig = SocketConfig.DEFAULT; } this.connectionOperator.connect( conn, host, localAddress, connectTimeout, socketConfig, context);
如果没有设置,会使用default值,里面soTimeout参数为0,也就是永久等待,会导致线程卡住。 设置方法如下:
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(); connManager.setDefaultSocketConfig(SocketConfig.custom().setSoTimeout(30000).build());
========================================= HttpClient httpClient = HttpClientBuilder.create().setConnectionManager(connManager) .setDefaultSocketConfig(SocketConfig.custom().setSoTimeout(30000).build()) .build();
这种写法,也需要设置SocketConfig,因为最后的build()里面也是创建了一个PoolingHttpClientConnectionManager,然后设置SocketConfig。
|