Пул соединений Apache HttpClient с поддержкой Tomcat

Я использую TomEE 7.1.0, который использует Tomcat 8.X. Я пытаюсь реализовать концепцию пула соединений Http в приложении Poc. Я написал простой сервис Rest и развернул его в TomEE на моей локальной машине. REst сервис запущен и работает. Я написал простую клиентскую программу, использующую Apache http-клиент с пулом http, который подключает мой локальный веб-сервис. Он способен подключиться и работает хорошо.

PoolingHttpClientConnectionManager pool = new PoolingHttpClientConnectionManager();
pool.setDefaultMaxPerRoute(5);
pool.setMaxTotal(5);
final CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(pool).build();
final String url = "http://localhost:8080/healthz";

Я использовал пример кода https://huongdanjava.com/create-and-use-http-client-connection-pool.html и проверил его с помощью команды netstat на отсутствие соединения в пуле на стороне клиента. это хорошо.

В соответствии с концепцией поддержания активности заголовок запроса клиента должен иметь Connection: keep-alive, а заголовок ответа сервера должен обеспечивать Connection: keep-alive, тогда одно и то же соединение можно использовать повторно, иначе оно не может быть одним и тем же соединением.

Я могу видеть значение keep-alive в заголовке запроса клиента, но в ответ нет значения keep alive, как клиент Apache может повторно использовать соединение. Но клиент Apache имеет 5 соединений. Я проверил, что с помощью Netcat.

Я проверил открытое соединение Tomcat, используя JMX ( Catalina, Thread Pool -> http:8080), который показывает число соединений = 1 и KeepAliveCount = 0. это значения по умолчанию. Никаких признаков 5 открытых соединений в Tomcat.

Мои Запросы

  1. Apache Http Client имеет 5 подключений, сервер Tomcat не показывает никаких подключений. Как проверить открытое соединение в Tomcat?
  2. Без значения keep-alive из заголовка ответа сервера, Как клиент хранит эти соединения как пул соединений?

root @ Host: ~ # netstat -tulpna | grep 26047 tcp6 1 0 127.0.0.1:48792 127.0.0.1:8080 CLOSE_WAIT 26047 / java tcp6 1 0 127.0.0.1:48794 127.0.0.1:8080
CLOSE_WAIT 26047 / java tcp6 1 0 127.0.0.1:48790
127.0.0.1:8080 CLOSE_WAIT 26047 / java tcp6 1 0 127.0.0.1:48788 127.0.0.1:8080 CLOSE_WAIT 26047 / java tcp6 1 0 127.0.0.1:48796
127.0.0.1:8080 CLOSE_WAIT 26047 / ja

Заголовок запроса клиента

заголовки - http-outgoing-1 >> GET /healthz HTTP/1.1 [DEBUG] заголовки - http-outgoing-1 >> Хост: localhost:8080 [DEBUG] заголовки - http-outgoing-1 >> Соединение: Keep-Alive [DEBUG] заголовки - http-outgoing-1 >> User-Agent: Apache-HttpClient/4.5.6 (Java/1.8.0_181) [DEBUG] заголовки - http-outgoing-1 >> Accept-Encoding: gzip,deflate [DEBUG] заголовки - http-outgoing-4 >> GET /healthz HTTP/1.1

Соединение заголовка ответа сервера [DEBUG] - http-outgoing-0 << "HTTP/1.1 200 [\r][\n]" [DEBUG] провод - http-outgoing-0 << "Дата: чт, 11 октября 2018 г. 14:28:03 GMT[\r][\n]" [DEBUG] провод - http-outgoing-0 <<" Содержание-Длина: 0 [\ r] [\ n] "[DEBUG] провод - http-outgoing- 0 << "Сервер: Apache TomEE [\ r] [\ n]" [DEBUG] провод - http-outgoing-0 << "[\ r] [\ n]"

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.6</version>
</dependency>

0 ответов

Другие вопросы по тегам