Когда io.netty.channel.ExtendedClosedChannelException] для ... но ServerHttpResponse уже зафиксирован (200 OK) может произойти? - PullRequest
0 голосов
/ 11 октября 2019

Мы разработали новый сервис нашей команды с spring-webflux. Это работало хорошо. Единственное, что мы не смогли выяснить, это запись ниже log

Ошибка [реактор.netty.ReactorNetty $ InternalNettyException: io.netty.channel.ExtendedClosedChannelException] для HTTP GET "[TARGET_URL]", но ServerHttpResponse ужеcommit (200 OK)

Хотя это случается не часто, оно регистрируется в нашем журнале регистрации данных.

Служба является своего рода посредником. Одна служба отправляет ему запрос «get», а затем вызывает другие бэкэнды для сбора данных, а затем возвращает. На уровне сервиса мы используем Mono.zip для объединения всех откликов от различных бэкэндов. Как клиенты, так и серверные приложения являются традиционными приложениями для потоковых спринтов.

Наш код для создания веб-клиента:

TcpClient timeoutClient = TcpClient.create()
                .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, connectionTimeout)
                .doOnConnected(
                        // There are various handlers like WriteTimeoutHandler. We can add more when we need them.
                        c -> c.addHandlerLast(new ReadTimeoutHandler(readTimeout, TimeUnit.MILLISECONDS)));

final ReactorClientHttpConnector connector = new ReactorClientHttpConnector(HttpClient.from(timeoutClient));

return WebClient.builder()
                .clientConnector(connector)
                .baseUrl(property.getBaseUrl());

Тайм-аут соединения установлен на 2500 миллисекунд. Тайм-аут чтения составляет 50-90 мс, в зависимости от серверной части.

Спасибо!

...