![](/img/trans.png)
[英]setMaxTotal and setDefaultMaxPerRoute in HttpClient?
[英]PoolingHttpClientConnectionManager setMaxTotal or setDefaultMaxPerRoute don't seem to work
在 Spring Boot 應用程序中,我使用 PoolingHttpClientConnectonManager 創建一個連接池,如下所示:
@Bean
public PoolingHttpClientConnectionManager createCM() {
PoolingHttpClientConnectionManager pcm = new PoolingHttpClientConnectionManager();
poolingHttpClientConnectionManager.setMaxTotal(100);
poolingHttpClientConnectionManager.setDefaultMaxPerRoute(100);
return pcm;
}
因為我只有一個路由,所以我保持 setMaxTotal 和 setDefaultMaxPerRoute 的值相同。
底層httpClient配置如下:
@Bean
public CloseableHttpClient createHttpClient(PoolingHttpClientConnectionManager pcm, RequestConfig rc) {
CloseableHttpClient httpClient = HttpClientBuilder
.create()
.setConnectionManager(pcm)
.setDefaultRequestConfig(rc)
.build();
return httpClient;
}
現在的問題是,當我在非常重的負載下對我的應用程序進行壓力測試以查看我的連接池的行為時,我沒有看到預期的結果。 我使用 jConsole 監視應用程序的線程,每次我只看到 2 個連接池線程處於可運行狀態,即 https-jsse-nio-80-ClientPoller-1 和 https-jsse-nio-80-ClientPoller-2。
我假設在每秒 1500 個請求的數量級的重負載下,它應該通過池中的 2 個以上(默認)連接來完成。 想知道出了什么問題,或者我的配置不正確。
就我而言,我使用 http 組件作為soap 客戶端庫,並使用一個實現WebServiceGatewaySupport 的類。 在這一點上,我做如下:
httpComponentsRequestFactory = new HttpComponentsClientHttpRequestFactory();
httpComponentsRequestFactory.setReadTimeout(readTimeout);
httpComponentsRequestFactory.setConnectTimeout(connectionTimeout);
httpComponentsRequestFactory.setHttpClient(createHttpClient(createConnectionManager(), createRequestConfig()));
client.setMessageSender(new ClientHttpRequestMessageSender(httpComponentsRequestFactory));
並啟用日志記錄到 org.apache.http 級別調試我現在看到:
Connection released: [id: 0][route: {}->http://host:8080][total available: 1; route allocated: 1 of 100; total allocated: 1 of 100]
所以我設法將默認連接數提高到 100 個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.