1. 程式人生 > >http 請求 超時時間設定

http 請求 超時時間設定

HttpParams params = new BasicHttpParams();
//設定連線超時時間
Integer CONNECTION_TIMEOUT = 2 * 1000; //設定請求超時2秒鐘 根據業務調整
Integer SO_TIMEOUT = 2 * 1000; //設定等待資料超時時間2秒鐘 根據業務調整
//定義了當從ClientConnectionManager中檢索ManagedClientConnection例項時使用的毫秒級的超時時間
//這個引數期望得到一個java.lang.Long型別的值。如果這個引數沒有被設定,預設等於CONNECTION_TIMEOUT,因此一定要設定
Long CONN_MANAGER_TIMEOUT = 500L; //該值就是連線不夠用的時候等待超時時間,一定要設定,而且不能太大 ()
 
params.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, CONNECTION_TIMEOUT);
params.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, SO_TIMEOUT);
params.setLongParameter(ClientPNames.CONN_MANAGER_TIMEOUT, CONN_MANAGER_TIMEOUT);
//在提交請求之前 測試連線是否可用
params.setBooleanParameter(CoreConnectionPNames.STALE_CONNECTION_CHECK, true);
 
PoolingClientConnectionManager conMgr = new PoolingClientConnectionManager();
conMgr.setMaxTotal(200); //設定整個連線池最大連線數 根據自己的場景決定
//是路由的預設最大連線(該值預設為2),限制數量實際使用DefaultMaxPerRoute並非MaxTotal。
//設定過小無法支援大併發(ConnectionPoolTimeoutException: Timeout waiting for connection from pool),路由是對maxTotal的細分。
conMgr.setDefaultMaxPerRoute(conMgr.getMaxTotal());//(目前只有一個路由,因此讓他等於最大值)
 
//另外設定http client的重試次數,預設是3次;當前是禁用掉(如果專案量不到,這個預設即可)

httpClient.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));

 此處解釋下MaxtTotal和DefaultMaxPerRoute的區別:

1、MaxtTotal是整個池子的大小; 2、DefaultMaxPerRoute是根據連線到的主機對MaxTotal的一個細分;比如: MaxtTotal=400 DefaultMaxPerRoute=200 而我只連線到http://xx.com時,到這個主機的併發最多隻有200;而不是400; 而我連線到 http://xx.com和 http://xxx.com時,到每個主機的併發最多隻有200;即加起來是400(但不能超過400);所以起作用的設定是DefaultMaxPerRoute。 2、httpclient 3.1 複製程式碼
HttpConnectionManagerParams params = new HttpConnectionManagerParams();
params.setConnectionTimeout(2000);
params.setSoTimeout(2000);
// 最大連線數
params.setMaxTotalConnections(500);
params.setDefaultMaxConnectionsPerHost(500);
params.setStaleCheckingEnabled(true);
connectionManager.setParams(params);
 
HttpClientParams httpClientParams 
= new HttpClientParams(); // 設定httpClient的連線超時,對連線管理器設定的連線超時是無用的 httpClientParams.setConnectionManagerTimeout(5000); //等價於4.2.3中的CONN_MANAGER_TIMEOUT httpClient = new HttpClient(connectionManager); httpClient.setParams(httpClientParams); //另外設定http client的重試次數,預設是3次;當前是禁用掉(如果專案量不到,這個預設即可) httpClientParams.setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(0, false));
複製程式碼

HttpClient 4 和 HttpClient 3 設定超時

HttpClient 4:
連線超時:

httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,60000);

// 或者

HttpConnectionParams.setConnectionTimeout(params, 6000);

讀取超時:

httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,60000);

// 或者

HttpConnectionParams.setSoTimeout(params, 60000);

HttpClient 3:
連線超時:

httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(60000);

讀取超時:

httpClient.getHttpConnectionManager().getParams().setSoTimeout(60000);