我使用 PoolingHttpClientConnectionManager 与以下服务并行发送多个GET / POST请求:
(1)http://localhost:8080/submit
(2)http://localhost:8080/query
两种服务都被大量使用,但第一项服务(1)具有更高的优先级。
我需要为service(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 :(得分:0)
根据我的同事的建议,我找到了解决方案。
我们需要控制最大连接数,以便在请求URL(1)时我们拥有最多20个连接的池,而其余类型的请求包括request(2)我们拥有最多2个连接的池。
可以通过创建两个不同的 HttpClient 对象来解决,每个对象都有自己的 PoolingHttpClientConnectionManager 。第一个管理器设置为setMaxTotal = 20,而第二个管理器设置为setMaxTotal = 2。
现在每个池对同一个域都有不同的限制。