Spring webflux WebClient регистрирует сброс соединения одноранговым узлом

У меня есть следующий код, который использует WebClient для HTTP-вызовов.

        webClient.post()
                 .uri("/users/track")
                 .body(BodyInserters.fromObject(getUserTrackPayload(selection, customAttribute, partyId).toString()))
                 .header(CONTENT_TYPE, APPLICATION_JSON)
                 .retrieve()
                 .onStatus(httpStatus -> !CREATED.equals(httpStatus),
                           response -> response.bodyToMono(String.class)
                                               .flatMap(body -> buildErrorMessage(response.statusCode().value(), body, partyId,
                                                                                  customAttribute)
                                                   .flatMap(e -> Mono.error(new MyException(e)))))
                 .bodyToMono(Object.class)
                 .map(o -> (JsonObject)new Gson().toJsonTree(o))
                 .flatMap(body -> body.get("message") != null && body.get("message").getAsString().equalsIgnoreCase("success")
                                  && body.get("attributes_processed") != null && body.get("attributes_processed").getAsInt() == 1
                     ? Mono.just(body)
                     : buildErrorMessage(CREATED.value(), body.toString(), partyId, customAttribute)
                         .flatMap(e -> Mono.error(new MyException(e))));

Я получаю следующие журналы при первом вызове этого кода через некоторое время (например, 10 минут). Но вызов выполняется с правильным выходом.

io.netty.channel.unix.Errors$NativeIoException: syscall:read(..) failed: Connection reset by peer at io.netty.channel.unix.FileDescriptor.readAddress(..)(Unknown Source)
2019-03-19 03:11:45,625 WARN  [:::] [reactor-http-epoll-8] reactor.netty.http.client.HttpClientConnect : [id: 0x2e3252c0, L:/172.18.0.125:42956 - R:my-endpoint.com/151.101.53.208:443] The connection observed an error

Не уверен, почему создаются эти журналы. Когда я использовал SpringBoot 2.1.0, он регистрировался на уровне ОШИБКИ, теперь я обновился до версии 2.1.3 (версия netty реактора - 0.8.5), и он регистрируется на уровне WARN. Стоит ли мне беспокоиться об этих журналах?


person chom    schedule 19.03.2019    source источник
comment
Удачи с этим? Я столкнулся с подобной проблемой.   -  person Nayab Siddiqui    schedule 12.02.2020


Ответы (1)


Я видел аналогичное поведение, когда клиент уходит (отскакивает) после подключения к нему один раз, а следующий запрос терпит неудачу, а затем повторяет попытку.

Попробуйте отключить пул соединений при создании WebClient. Что-то вроде этого:

@Bean
public WebClient webClient() {
    return WebClient.builder()
             .clientConnector(connector())
             .build();
}

private ClientHttpConnector connector() {
    return new ReactorClientHttpConnector(HttpClient.from(TcpClient.newConnection()));
}
person fedup    schedule 18.10.2019
comment
не повлияет ли на производительность, если мы отключим пул соединений? - person Rajeev; 30.03.2020