如何使用PoolingHttpClientConnectionManager设置连接超时与套接字超时
在httpclient v4.5.x版本中,连接超时、套接字超时等请求相关的配置不再耦合在连接池类中,统一由RequestConfig类负责管理,你可以按以下方式完成和v3.1版本等效的配置:
1. 配置连接池参数
首先初始化PoolingHttpClientConnectionManager,配置原有的连接池相关参数:
// 初始化连接池,替代原MultiThreadedHttpConnectionManager PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(); // 对应原setMaxTotalConnections,设置连接池最大连接数 connectionManager.setMaxTotal(150); // 对应原setMaxConnectionsPerHost,设置每个路由的默认最大连接数 connectionManager.setDefaultMaxPerRoute(90);
2. 配置超时参数
通过RequestConfig构建超时规则,对应你需要的连接超时和套接字超时:
RequestConfig defaultRequestConfig = RequestConfig.custom() // 对应原setConnectionTimeout,设置TCP连接建立的超时时间,单位毫秒 .setConnectTimeout(15000) // 对应原setSoTimeout,设置套接字读取数据的超时时间,单位毫秒 .setSocketTimeout(600000) // 可选配置:设置从连接池获取连接的等待超时时间,可根据业务需要调整 .setConnectionRequestTimeout(5000) .build();
3. 构建HttpClient实例
将连接池和默认超时配置绑定到HttpClient实例,后续所有请求默认都会使用该配置:
CloseableHttpClient httpClient = HttpClients.custom() .setConnectionManager(connectionManager) .setDefaultRequestConfig(defaultRequestConfig) .build();
如果有单个请求需要特殊调整超时规则,也可以单独给请求设置自定义的RequestConfig,会覆盖全局默认配置,示例如下:
// 为单个请求定制超时配置 RequestConfig customConfig = RequestConfig.copy(defaultRequestConfig) .setSocketTimeout(30000) .build(); HttpGet getRequest = new HttpGet("请求目标地址"); getRequest.setConfig(customConfig);
内容的提问来源于stack exchange,提问作者vivek hegde
相关产品推荐
相关产品推荐

