如何为SOAP设置连接超时?HttpClient构建客户端时找不到对应API
Apache HttpClient 4.3+版本未在HttpClient构建器中提供直接的setTimeout相关API,超时参数需要通过RequestConfig类配置,可按如下方式修改代码:
首先构造RequestConfig实例指定超时阈值:
// 单位均为毫秒,可根据业务场景调整对应数值 RequestConfig defaultRequestConfig = RequestConfig.custom() // 连接目标服务的超时时间 .setConnectTimeout(5000) // 等待服务返回数据的超时时间(两个数据包的最大间隔) .setSocketTimeout(30000) // 从连接池中获取可用连接的超时时间 .setConnectionRequestTimeout(1000) .build();
之后将该配置设置到HttpClient的全局默认配置中即可,完整代码如下:
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE); // 构造全局默认请求配置 RequestConfig defaultRequestConfig = RequestConfig.custom() .setConnectTimeout(5000) .setSocketTimeout(30000) .setConnectionRequestTimeout(1000) .build(); HttpClient httpClient = HttpClients.custom() .setSSLSocketFactory(socketFactory) .addInterceptorFirst(new RemoHttpHeadersInterceptor()) .setMaxConnTotal(config.getDefaultMaxTotalConnections()) .setMaxConnPerRoute(config.getDefaultMaxRouteConnections()) // 注入全局默认请求配置 .setDefaultRequestConfig(defaultRequestConfig) .build(); return httpClient;
如果需要为单个请求单独设置超时,不需要修改全局HttpClient配置,直接在构造对应请求(HttpGet/HttpPost等)时指定RequestConfig即可,优先级高于全局配置,示例如下:
HttpGet httpGet = new HttpGet("请求地址"); // 为当前请求单独设置超时 RequestConfig customConfig = RequestConfig.copy(defaultRequestConfig) .setSocketTimeout(60000) .build(); httpGet.setConfig(customConfig);
内容的提问来源于stack exchange,提问作者JITHIN_PATHROSE
相关产品推荐
相关产品推荐

