2016-08-01 202 views
0

我使用PoolingHttpClientConnectionManager用于发送多个并行的GET/POST请求以下服务:如何使用PoolingHttpClientConnectionManager限制同一主机(setMaxPerRoute)的连接?

(1)http://localhost:8080/submit
(2)http://localhost:8080/query

两种服务大量使用,但所述第一服务(1)具有更高的优先权。

我需要为服务(1)设置setMaxPerRoute,以便它将消耗80%的可用连接。 剩余的20%限制将被分配给具有较长超时的其他请求(包括服务(2))。这里是我的代码:

...   
    PoolingHttpClientConnectionManager httpClientManager = 
        new PoolingHttpClientConnectionManager(); 

      httpClientManager.setMaxTotal(10); 

      httpClientManager.setDefaultMaxPerRoute(2); 

      HttpHost httpHost = new HttpHost("http://localhost/submit",8080); 
      HttpRoute submitRoute = new HttpRoute(httpHost); 
      httpClientManager.setMaxPerRoute(submitRoute, 8); 
    ... 

问题是,HttpHost显然不能相同,以区分不同的路线。实际上,两个URL具有相同的主机(http://localhost:8080),但具有不同的请求页面。在结果中,两个服务都使用相同的资源。

有什么办法可以对同一个主机实现这样的限制吗?

感谢您的帮助。

回答

0

经过我的同事的建议,我找到了解决方案。我们需要控制连接的最大数量,以便在请求URL(1)时,我们拥有最多20个连接的池,而包含请求(2)的其余类型的请求具有最多2个连接的池。

它可以通过创建两个不同的HttpClient的对象,每个人都有自己的PoolingHttpClientConnectionManager来解决。第一个管理器设置为setMaxTotal = 20,而第二个管理器设置为setMaxTotal = 2。

现在,每个池对同一个域具有不同的限制。

相关问题