Java開發咱們經常須要和第三方系統進行通訊,通訊的方式有多種,如dubbo方式,webservice,微服務和CloseableHttpClient等方式,常涉及到超時問題,這裏主要說的是CloseableHttpClient的超時設置以及超市了的異常處理;通常思路就是,java
1,定義超時的時間,這個通常做爲一個配置項,方便隨時修改;web
2,請求配置對象RequestConfig設置超時時間,而後設置到 HttpGet 或 HttpPost 請求方法對象;apache
3,使用CloseableHttpClient對象執行相應的請求方法,同時使用 try...catch... 捕獲異常,對於超時可經過 SocketTimeoutExcetption 和 ConnectTimeoutException捕獲異常;微服務
例以下面簡要例子(相應的jar自行網上查找);ui
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());
}
}
.net