Пул соединений Apache HttpClient с поддержкой Tomcat - PullRequest
0 голосов
/ 11 октября 2018

Я использую TomEE 7.1.0, который использует Tomcat 8.X.Я пытаюсь реализовать концепцию пула соединений Http в приложении Poc.Я написал простой сервис Rest и развернул его в TomEE на моей локальной машине.REst сервис запущен и работает.Я написал простую клиентскую программу с использованием HTTP-клиента Apache с пулом 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 для отсутствия соединения в пуле на стороне клиента.это хорошо.

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

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

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

Мои запросы

  1. Клиент Apache Http имеет 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 >> Пользовательский агент: 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-исходящий-0 << "Content-Length: 0 [\ r] [\ n]" [DEBUG] провод - http-outgoing-0 << "Сервер: Apache TomEE [\ r] [\ n]" [DEBUG] провод- http-outgoing-0 << "[\ r] [\ n]" </p>

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.6</version>
</dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...