Я использую ConnPoolControl<HttpRoute>
и PoolingHttpClientConnectionManager
для выполнения нескольких http-запросов к службам SOAP.
Во время нагрузочного теста с использованием Jmeter я получаю исключение ConnectionPoolTimeoutException. Поэтому я сначала попытался отследить пул соединений, используя приведенный ниже код.
При локальном воспроизведении ошибки мой журнал всегда показывает следующее:
connPoolControl stats: [leased: 0; pending: 0; available: 0; max: 200]
ЛюбойИдея о том, почему в аренде всегда ноль?
public class WebServiceConfig {
public static ConnPoolControl<HttpRoute> connPoolControl;
public WebServiceMessageSender webServiceMessageSender(String connectionTimeout, String readTimeout) {
return makeSender(Integer.valueOf(readTimeout), Integer.valueOf(connectionTimeout));
}
public HttpComponentsMessageSender makeSender(Integer readTimeout, Integer connectionTimeOut) {
HttpComponentsMessageSender sender = new HttpComponentsMessageSender();
sender.setReadTimeout(readTimeout);
sender.setConnectionTimeout(connectionTimeOut);
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
connManager.setMaxTotal(200);
connManager.setDefaultMaxPerRoute(50);
CloseableHttpClient poolingHttpSoapClient = HttpClients.custom()
.setConnectionManager(connManager)
.build();
sender.setHttpClient(poolingHttpSoapClient);
connPoolControl = connManager;
return sender;
}
}
log.info("before connPoolControl stats: " + WebServiceConfig.connPoolControl.getTotalStats().toString());
MySoapResponse response = (MySoapResponse)
webServiceTemplate.marshalSendAndReceive(host, request);
log.info("after connPoolControl stats: " + WebServiceConfig.connPoolControl.getTotalStats().toString());