Мы разработали новый сервис нашей команды с 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 мс, в зависимости от серверной части.
Спасибо!