簡體   English   中英

如何在PoolingHttpClientConnectionManager中設置setMaxPerRoute?

[英]How to set setMaxPerRoute in PoolingHttpClientConnectionManager?

我有PoolingHttpClientConnectionManager ,我想在其中設置每個路由的最大連接數。 我正在以以下方式進行操作:

poolingHttpClientConnectionManager.setDefaultMaxPerRoute(5);
poolingHttpClientConnectionManager.setMaxPerRoute(new HttpRoute(HttpHost.create(url)), 3);

例如,我的urlhttps://repo.maven.apache.org/maven2 所以我有每個路由5的默認最大和每個特定URL的3。 那我打電話

poolingHttpClientConnectionManager.getStats(new HttpRoute(HttpHost.create(url))); 

結果我收到的PoolStatsmax = 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM