Java中CloseableHttpClient的超時設定和異常處理
阿新 • • 發佈:2018-12-15
Java開發我們常常需要和第三方系統進行通訊,通訊的方式有多種,如dubbo方式,webservice,微服務和CloseableHttpClient等方式,常涉及到超時問題,這裡主要說的是CloseableHttpClient的超時設定以及超市了的異常處理;一般思路就是,
1,定義超時的時間,這個一般作為一個配置項,方便隨時修改;
2,請求配置物件RequestConfig設定超時時間,然後設定到 HttpGet 或 HttpPost 請求方法物件;
3,使用CloseableHttpClient物件執行相應的請求方法,同時使用 try...catch... 捕獲異常,對於超時可通過 SocketTimeoutExcetption 和 ConnectTimeoutException捕獲異常;
例如下面簡要例子(相應的jar自行網上查詢);
package com.xxx.yyy.kkk; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.ConnectTimeoutException; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.BasicHttpClientConnectionManager; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import java.io.IOException; import java.net.SocketTimeoutException; public class HttpClient001 { public void getXXX() throws Exception { CloseableHttpClient httpclient = HttpClients.createDefault(); RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(1000) .setSocketTimeout(1000).setConnectTimeout(1000).build(); HttpGet httpGet = new HttpGet("http://www.xxx.com"); httpGet.setConfig(requestConfig); try { CloseableHttpResponse response = httpclient.execute(httpGet); //....do more work... } catch (SocketTimeoutExcetption | ConnectTimeoutException ex) { System.out.println("請求連線超時"); } catch (Exception ex) { System.out.println("請求異常,異常資訊:" + ex.getMessage()); } } }
這樣在Java後端向第三方請求時就可以自己設定需要的超時時間,比較可控點,怎麼樣,試一下吧...