java在调用http请求时需要使用到httpclient发送http请求。(也有其他,我使用的这一个)为了避免调用他人的连接出问题需要设置超时。
我使用的版本是:httpclient-4.5.6
private static PoolingHttpClientConnectionManager connMgr;
private static RequestConfig requestConfig;
private static final int MAX_TIMEOUT = 3000;
static {
// 设置连接池
connMgr = new PoolingHttpClientConnectionManager();
// 设置连接池大小
connMgr.setMaxTotal(100);
connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal());
// Validate connections after 1 sec of inactivity
connMgr.setValidateAfterInactivity(1000);
RequestConfig.Builder configBuilder = Reques
以上为关键代码:主要设置了tConfig.custom();
// 设置连接超时
configBuilder.setConnectTimeout(MAX_TIMEOUT);
// 设置读取超时
configBuilder.setSocketTimeout(MAX_TIMEOUT);
// 设置从连接池获取连接实例的超时
configBuilder.setConnectionRequestTimeout(MAX_TIMEOUT);
requestConfig = configBuilder.build();
}
以上为关键代码:设置了settimeout属性赋值给RequestConfig对象。
然后
HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()).setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build();
测试了设置的超时在本地是一切正常的。但是在服务器上这一步很慢。大约需要2分钟。在网上找答案有人说是需要设置重试策略。(我觉得这步跟我的超时没关系,尝试了也不行)。
已经确定了是这个调用http特别慢了,如何处理,想不通为什么设置的超时在服务器不起作用,有可能服务器做了什么限制吗?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…