2014-10-01 105 views
1

我有下面的代碼來調用使用Apache HTTP客戶端的REST API方法。但是隻有兩個並行請求可以使用上面的客戶端發送。 是否有任何參數設置最大連接?Apache HTTP客戶端只有兩個連接是可能的

 HttpPost post = new HttpPost(resourcePath); 
      addPayloadJsonString(payload, post);//set a String Entity 
      setAuthHeader(post);// set Authorization: Basic header 
      try { 
       return httpClient.execute(post); 

      } catch (IOException e) { 
       String errorMsg = "Error while executing POST statement"; 
       log.error(errorMsg, e); 


    throw new RestClientException(errorMsg, e); 
     } 

罐子我使用低於是,

org.apache.httpcomponents.httpclient_4.3.5.jar 
org.apache.httpcomponents.httpcore_4.3.2.jar 

回答

2

您可以HttpClientConnectionManager

配置HttpClient的看看Pooling connection manager

ClientConnectionPoolManager維護一個池HttpClientConnections並且能夠服務來自多個執行線程的連接請求。連接彙總在每個路由的基礎上。對於已經是管理器具有可用於池中的持續連接的路由的請求將是通過從池租用連接而不是創建全新連接的服務。

PoolingHttpClientConnectionManager保持每個路線和總數的最大連接限制。默認情況下,此實現將爲每個給定路由創建不超過2個併發連接,總共不會有20個連接。對於許多真實世界的應用程序來說,這些限制可能會被證明過於嚴格,特別是如果他們使用HTTP作爲其服務的傳輸協議。

這個例子顯示了連接池參數如何進行調整:

PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); 
// Increase max total connection to 200 
cm.setMaxTotal(200); 
// Increase default max connection per route to 20 
cm.setDefaultMaxPerRoute(20); 
// Increase max connections for localhost:80 to 50 
HttpHost localhost = new HttpHost("locahost", 80); 
cm.setMaxPerRoute(new HttpRoute(localhost), 50); 

CloseableHttpClient httpClient = HttpClients.custom() 
     .setConnectionManager(cm) 
     .build(); 
+0

感謝您的回答。還有一個問題。如果使用池連接管理器,我們不必在下面執行GET或POST時關閉連接,是嗎? HttpPost post = new HttpPost(resourcePath); try { return httpClient.execute(post); } catch(IOException e){ //處理異常 } finally { post.releaseConnection(); } – 2014-10-08 09:52:52

+0

@ UdaraS.SLiyanage希望你得到它的工作:-) – 2014-10-08 09:53:34

相關問題