Весной загрузки реактивный WebClient вызывает устаревшую конечную точку - PullRequest
2 голосов
/ 04 февраля 2020

В приложении Spring Boot (2.2.2.RELEASE) у меня есть реактивные конечные точки (возвращающие Mono или Flux), каждая из которых использует реактивный WebClient для вызова другой службы. Этот «другой» сервис является устаревшим (нереактивным).

Вот мой вопрос:

  • Есть ли преимущество использования Webflux (реактивный WebClient), если мой реактивная конечная точка вызывает эту нереактивную конечную точку, которая выполняет блокировку?

  • Является ли моя реактивная конечная точка все еще реактивной?

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Если мы говорим о конечных точках HTTP, мы можем вызывать их с блокирующими или неблокирующими (асинхронными) клиентами, но не с полной реактивностью.

Если ваше «новое» приложение реагирует, вы должны используйте неблокирующий клиент (в вашем случае WebClient), иначе вы заблокируете NIO-потоки и потеряете все преимущества реактивного подхода. Тот факт, что «другое» приложение блокирует, не имеет значения, вы все равно можете получить менее ресурсоемкое «новое» приложение.

1 голос
/ 04 февраля 2020

Они 1. Не полностью. 2. Ваш запрос не является полностью реагирующим до тех пор, пока вы не измените устаревшие API

Объяснение: Сквозная модель Reactive только влияет на производительность В настоящее время вы используете реактивный клиент, это помогает подключиться к серверу двухсторонней связью. Первый набор API-интерфейсов реагирует, поэтому уровень веб-сервера теперь реагирует, но уровень данных (устаревшие API-интерфейсы) не реагирует

...