2016-08-01 75 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。

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

相關問題