解決httpclient超時設置不生效的問題

最近公司有項目須要經過http調用第三方服務,且第三方服務偶有超時,故須要設置必定的超時時間防止不響應的狀況出現。java

初始設置以下:web

 

[java] view plain copyapp

  1. //超時設置  
  2. RequestConfig requestConfig = RequestConfig.custom()  
  3.         .setConnectTimeout(400).setSocketTimeout(400).build();  
  4.   
  5. request.setEntity(s);  
  6. request.setConfig(requestConfig);  
  7.   
  8. HttpClient client = new HttpClient();  
  9. HttpResponse httpResponse = client.execute(request);  

 

發現設置並未生效,後發現是因爲沒有設置重試選項,將代碼修改以下:socket

 

[java] view plain copyide

  1.    private HttpRequestRetryHandler myRetryHandler = new HttpRequestRetryHandler() {  
  2.     @Override  
  3.     public boolean retryRequest(IOException exception,  
  4.             int executionCount, HttpContext context) {  
  5.         return false;  
  6.     }};  
  7.   
  8. //超時設置  
  9. RequestConfig requestConfig = RequestConfig.custom()  
  10.         .setConnectTimeout(connectTImeoutInMills).setSocketTimeout(socketTImeoutInMills).build();  
  11.   
  12. request.setEntity(s);  
  13. request.setConfig(requestConfig);  
  14.   
  15. HttpClient client = HttpClients.custom().setRetryHandler(myRetryHandler).build();  
  16. HttpResponse httpResponse = client.execute(request);  

 

超時設置即生效。ui

 

 

備註:spa

httpclient版本爲4.5。.net

相關文章
相關標籤/搜索