簡體   English   中英

如何使用PoolingHttpClientConnectionManager限制同一主機(setMaxPerRoute)的連接?

[英]How to to limit connections for the same host (setMaxPerRoute) using PoolingHttpClientConnectionManager?

我使用PoolingHttpClientConnectionManager並行發送多個GET / POST請求到以下服務:

(1) http:// localhost:8080 /提交
(2) http://本地主機: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 ),但是請求頁面不同。 結果,兩個服務使用相同的資源。

有沒有辦法對同一主機實施這種限制?

感謝幫助。

經過我同事的建議,我找到了解決方案。

我們需要控制最大連接數,以便在請求URL(1)時,我們的池具有最多20個連接,而其余類型的請求(包括請求(2))中,我們的池具有最多2個連接。

可以通過創建兩個不同的HttpClient對象來解決,每個對象都有自己的PoolingHttpClientConnectionManager 第一個管理器設置為setMaxTotal = 20,第二個管理器設置為setMaxTotal = 2。

現在,每個池對於同一域都有不同的限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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