Я получаю сообщение об ошибке MonoError, вызванное IllegalStateException, с причиной «Базовый клиент HTTP завершен без отправки ответа».
NetworkList — это класс, содержащий списки топологии сети и имеющий setList, который вызывается из метода convertJsonToPojo.
client — это WebClient (spring-webflux) в Spring 5 (5.0.4.RELEASE), использующий Reactor-Netty (0.7.5.RELEASE).
В следующем фрагменте показано, как я использую WebClient для выполнения асинхронных вызовов type = BOARDS, CARDS, PORTS, ROUTERS и т. д., где имя сети передается как имя проекта, а тип топологии передается как тип.
NetworkList netList = new NetworkList();
client.get().uri("/{project}/{type}",projectName,type).retrieve().bodyToMono(String.class).subscribe(json -> this.convertJsonToPojo(Type.BOARD, json, netList));
Остальная служба, с которой я сталкиваюсь, — это единственная служба, которая возвращает json, представляющий запрошенные компоненты.
Это похоже на Reactive WebClient Not Emiting A Response, но ответ внутри указывает на следующая проблема реактора-netty проблема 138. Эта проблема исправлена в версии 0.6.6.RELEASE.
Итак, мой вопрос: я неправильно использую WebClient по незнанию или я должен представить это как неисправленную ошибку? Я новичок в Spring 5 и библиотеке Reactive, поэтому не хочу наивно сообщать об ошибке.
Спасибо за ваше время заранее!
PS - у меня это работает с RestTemplate и CompletableFuture, поэтому нет необходимости предлагать это предложение в качестве альтернативы. Моя задача — начать переход на реактивную архитектуру. Благодарю вас!
ОБНОВЛЕНИЕ. Кажется, теперь я понимаю, что происходит, но хотел бы получить подтверждение от кого-нибудь. Остальной сервис, с которым я сталкиваюсь, является традиционным, а не реактивным потоком. Таким образом, во время вызова не происходит обмена «этапными» обновлениями. .subscribe() ожидает реактивный поток и, таким образом, никогда не получает полную стадию. замена .subscribe() на .block() привела к завершению, и теперь код работает. Итак, мой вывод из этого заключается в том, что при работе с традиционными службами отдыха требуется блок. Может ли кто-нибудь подтвердить это, пожалуйста? Благодарю вас!