WebClient Spring 5 IllegalStateException

Я получаю сообщение об ошибке 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() привела к завершению, и теперь код работает. Итак, мой вывод из этого заключается в том, что при работе с традиционными службами отдыха требуется блок. Может ли кто-нибудь подтвердить это, пожалуйста? Благодарю вас!


person JavaJd    schedule 24.03.2018    source источник
comment
«Из этого я узнал, что при работе с традиционными службами отдыха требуется блокировка».» Это неправда. Можно ли поделиться своим кодом? Я не вижу никакой очевидной ошибки в этих двух строках.   -  person Martin Tarjányi    schedule 25.03.2018
comment
@Yossarian, tyvm за ответ!! Это единственный код, который использует веб-клиент, и я попытался разделить его, но основная цепочка такая же, какие-нибудь общие мысли о том, почему это может происходить? Я планирую пройти онлайн-курс Spring Reactive Programming, поэтому в ближайшем будущем я должен стать лучше. Большое спасибо еще раз за ответ, слишком часто я буду что-то постить, а потом ..... сверчки. Заботиться!   -  person JavaJd    schedule 28.03.2018