Sobes.tech
Back to questions
Junior — Middle
61

Каким образом реализовать блокирующий вызов в реактивном приложении на базе WebFlux?

Answer from AI

sobes.tech AI

В реактивном приложении на базе Spring WebFlux блокирующий вызов следует выполнять вне реактивного потока, чтобы не блокировать event loop и не ухудшать производительность. Для этого можно использовать метод subscribeOn с выделенным Scheduler, например, Schedulers.boundedElastic(), который предназначен для блокирующих операций.

Пример:

Mono<String> blockingCall = Mono.fromCallable(() -> {
    // блокирующая операция, например, вызов к БД или внешнему сервису
    Thread.sleep(1000);
    return "result";
}).subscribeOn(Schedulers.boundedElastic());

blockingCall.subscribe(result -> System.out.println("Получено: " + result));

Таким образом, блокирующий код выполняется в отдельном потоке, не блокируя основной реактивный поток.