[英]How to to limit connections for the same host (setMaxPerRoute) using PoolingHttpClientConnectionManager?
[英]How to set setMaxPerRoute in PoolingHttpClientConnectionManager?
我有PoolingHttpClientConnectionManager
,我想在其中設置每個路由的最大連接數。 我正在以以下方式進行操作:
poolingHttpClientConnectionManager.setDefaultMaxPerRoute(5);
poolingHttpClientConnectionManager.setMaxPerRoute(new HttpRoute(HttpHost.create(url)), 3);
例如,我的url
是https://repo.maven.apache.org/maven2
。 所以我有每個路由5的默認最大和每個特定URL的3。 那我打電話
poolingHttpClientConnectionManager.getStats(new HttpRoute(HttpHost.create(url)));
結果我收到的PoolStats
的max = 3
所以一切正常。
但是,當我使用池連接管理器創建客戶端並調用相同的URL時,我可以在日志中看到:
PoolingHttpClientConnectionManager - Connection leased: [id: 0][route: {s}->https://repo.maven.apache.org:443][total kept alive: 0; route allocated: 1 of 5; total allocated: 1 of 200]
如我所見,該示例網址最多仍使用5個連接。 所以我的問題是如何為每個路由設置最大連接數以使其正常工作?
好的,我設法用下一個代碼修復了它:
// code to create HttpRoute the same as in apache library
private HttpRoute getHttpRouteForUrl(String url) throws URISyntaxException
{
URI uri = new URI(url);
boolean secure = uri.getScheme().equalsIgnoreCase("https");
int port = uri.getPort();
if (uri.getPort() > 0)
{
port = uri.getPort();
}
else if (uri.getScheme().equalsIgnoreCase("https"))
{
port = 443;
}
else if (uri.getScheme().equalsIgnoreCase("http"))
{
port = 80;
}
else
{
LOGGER.warn("Unknown port of uri %s", repository);
}
HttpHost httpHost = new HttpHost(uri.getHost(), port, uri.getScheme());
// TODO check whether we need this InetAddress as second param
return new HttpRoute(httpHost, null, secure);
}
而且,如果我們將此HttpRoute
用於setMaxPerRoute
一切都會按預期進行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.