最近公司有项目需要通过http调用第三方服务,且第三方服务偶有超时,故需要设置一定的超时时间防止不响应的情况出现。
初始设置如下:
//超时设置
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(400).setSocketTimeout(400).build();
request.setEntity(s);
request.setConfig(requestConfig);
HttpClient client = new HttpClient();
HttpResponse httpResponse = client.execute(request);发现设置并未生效,后发现是由于没有设置重试选项,将代码修改如下:
private HttpRequestRetryHandler myRetryHandler = new HttpRequestRetryHandler() {
@Override
public boolean retryRequest(IOException exception,
int executionCount, HttpContext context) {
return false;
}};
//超时设置
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(connectTImeoutInMills).setSocketTimeout(socketTImeoutInMills).build();
request.setEntity(s);
request.setConfig(requestConfig);
HttpClient client = HttpClients.custom().setRetryHandler(myRetryHandler).build();
HttpResponse httpResponse = client.execute(request);
备注:
httpclient版本为4.5。
本文介绍了一种解决HTTP调用第三方服务时超时问题的方法。通过设置连接超时和套接字超时时间,并正确配置重试处理器,确保了请求能够有效处理超时情况。
1144





