如何在Apache HttpClient 5.2中替换已废弃的setConnectTimeout()方法
Apache HttpClient 5.2 替换废弃的setConnectTimeout()方法
在HttpClient 5.2中,连接超时(原RequestConfig的setConnectTimeout)已经从请求配置移到了**连接配置(ConnectionConfig)**里,需要通过连接管理器(PoolingHttpClientConnectionManager)来配置,而不是RequestConfig。具体修改步骤如下:
1. 创建ConnectionConfig并设置连接超时
首先导入org.apache.hc.client5.http.config.ConnectionConfig,用它的Builder来定义连接超时:
import org.apache.hc.client5.http.config.ConnectionConfig; // 构建连接配置,设置原有的连接超时时间 ConnectionConfig connectionConfig = ConnectionConfig.custom() .setConnectTimeout(cTimeout) .build();
2. 将ConnectionConfig配置到连接管理器
把上面的连接配置绑定到PoolingHttpClientConnectionManager,分两种场景处理:
- 如果是新建连接管理器:在构建时直接传入配置
import org.apache.hc.client5.http.impl.PoolingHttpClientConnectionManagerBuilder; PoolingHttpClientConnectionManager poolingHttpClientConnecMgr = PoolingHttpClientConnectionManagerBuilder.create() .setDefaultConnectionConfig(connectionConfig) // 这里可以添加其他连接管理器配置,比如最大连接数、每个路由的最大连接数等 .build();
- 如果连接管理器已存在:调用
setDefaultConnectionConfig方法更新配置
poolingHttpClientConnecMgr.setDefaultConnectionConfig(connectionConfig);
3. 保留RequestConfig的现有修改
你已经正确将socketTimeout替换为responseTimeout,这部分代码无需变动:
import org.apache.hc.client5.http.config.RequestConfig; public RequestConfig requestConfig() { return RequestConfig.custom() .setConnectionRequestTimeout(cRtimout) .setResponseTimeout(sTimout) // socketTimeout已替换为responseTimeout .build(); }
完整的HttpClient构建代码
注意修正原代码中ClosableHttpClient的拼写错误(正确应为CloseableHttpClient):
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; import org.apache.hc.client5.http.impl.classic.HttpClients; public CloseableHttpClient httpClient(RequestConfig reqConfig, PoolingHttpClientConnectionManager poolingHttpClientConnecMgr) { // 若连接管理器是外部传入,需确保已提前配置好ConnectionConfig // 若未配置,可在此处补充:poolingHttpClientConnecMgr.setDefaultConnectionConfig(connectionConfig); CloseableHttpClient client = HttpClients.custom() .setDefaultRequestConfig(reqConfig) .setConnectionManager(poolingHttpClientConnecMgr) .setRetryStrategy(// 你的重试策略代码块) .build(); return client; }
补充说明
HttpClient 5.x对超时配置做了职责拆分:
ConnectionConfig:负责连接层面的超时(比如建立TCP连接的时间)RequestConfig:负责请求层面的超时(比如等待响应的时间、从连接池获取连接的时间)
这样的划分让配置逻辑更清晰,避免了之前版本中职责混淆的问题。
内容的提问来源于stack exchange,提问作者CodeLearner
相关产品推荐
相关产品推荐

