Как убедиться, что http-клиент rector netty создает исправленное соединение с http-сервером

Я использую приведенный ниже код для создания http-клиента netty реактора и использую этот клиент для отправки запроса.


ConnectionProvider connectionProvider = ConnectionProvider.builder("lead")
    .maxConnections(10)
    .pendingAcquireTimeout(Duration.ofSeconds(60))
    .pendingAcquireMaxCount(10)
    .maxLifeTime(Duration.ofSeconds(100))
    .maxIdleTime(Duration.ofSeconds(60))
    .build();

HttpClient httpClient = HttpClient.create(connectionProvider)
    .keepAlive(true);

Я в цикле отправляю запрос:

for (; ; ) {
    httpClient.get().uri("http://localhost:5230/test")
        .response()
        .subscribe();
}

Я надеюсь, что http-клиент создает только 10 подключений к http-серверу, но результат не такой, как ожидалось, клиент создает много подключений к http-серверу (сервер прослушивает порт 5230) (это соединение скоро закрылось):

netstat -nap | вывод grep 5230

  TCP    127.0.0.1:5230         0.0.0.0:0              LISTENING       1980
  TCP    127.0.0.1:5230         127.0.0.1:51012        ESTABLISHED     1980
  TCP    127.0.0.1:5230         127.0.0.1:51014        ESTABLISHED     1980
  TCP    127.0.0.1:5230         127.0.0.1:51015        ESTABLISHED     1980
  TCP    127.0.0.1:5230         127.0.0.1:51016        ESTABLISHED     1980
  TCP    127.0.0.1:5230         127.0.0.1:51017        ESTABLISHED     1980
  TCP    127.0.0.1:5230         127.0.0.1:51018        ESTABLISHED     1980
  TCP    127.0.0.1:5230         127.0.0.1:51019        ESTABLISHED     1980
  TCP    127.0.0.1:5230         127.0.0.1:51020        ESTABLISHED     1980
  TCP    127.0.0.1:5230         127.0.0.1:51021        ESTABLISHED     1980
  TCP    127.0.0.1:5230         127.0.0.1:51022        ESTABLISHED     1980
  TCP    127.0.0.1:50393        127.0.0.1:5230         TIME_WAIT       0
  TCP    127.0.0.1:50394        127.0.0.1:5230         TIME_WAIT       0
  TCP    127.0.0.1:50395        127.0.0.1:5230         TIME_WAIT       0
  TCP    127.0.0.1:50396        127.0.0.1:5230         TIME_WAIT       0
  TCP    127.0.0.1:50397        127.0.0.1:5230         TIME_WAIT       0
  TCP    127.0.0.1:50398        127.0.0.1:5230         TIME_WAIT       0
  TCP    127.0.0.1:50399        127.0.0.1:5230         TIME_WAIT       0
  TCP    127.0.0.1:50400        127.0.0.1:5230         TIME_WAIT       0
  TCP    127.0.0.1:50401        127.0.0.1:5230         TIME_WAIT       0
  .... there is many connection in TIME_WAIT status....

Как я могу убедиться, что http-клиент создает только 10 подключений к http-серверу?

Версия:

jdk 1.8.0_201
reactory-netty 1.0.3
netty 4.15.9.Final

person TongChen    schedule 20.04.2021    source источник


Ответы (1)


С помощью Виолетты Георгиевы в методе reactory netty response() соединение http-клиента будет закрыто, поэтому http-клиент создаст много соединение с сервером : создать соединение - ›отправить запрос -› закрыть соединение。

Приведенный ниже код работает должным образом:

httpClient.get().uri("http://127.0.0.1:5230/test")
    .responseSingle(new BiFunction<HttpClientResponse, ByteBufMono, Mono<String>>() {
        @Override
        public Mono<String> apply(HttpClientResponse response, ByteBufMono byteBufMono) {
            return byteBufMono.asString();
        }
    })
    .subscribe();
person TongChen    schedule 20.04.2021