最近公司有项目需要通过http调用第三方服务,且第三方服务偶有超时,故需要设置一定的超时时间防止不响应的情况出现。
初始设置如下:
[java] view plain copy
- //超时设置
- RequestConfig requestConfig = RequestConfig.custom()
- .setConnectTimeout(400).setSocketTimeout(400).build();
- request.setEntity(s);
- request.setConfig(requestConfig);
- HttpClient client = new HttpClient();
- HttpResponse httpResponse = client.execute(request);
发现设置并未生效,后发现是由于没有设置重试选项,将代码修改如下:
[java] view plain copy
- 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。