2014-10-01 106 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

相关问题