Sobes.tech
Back to questions
Senior
11

Как в реактивном пайплайне обратиться к блокирующему источнику данных (например, БД)?

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

В реактивном пайплайне (например, с использованием Project Reactor или RxJava) блокирующие источники данных, такие как базы данных, нужно оборачивать в неблокирующие вызовы, чтобы не блокировать поток реактивного исполнения.

Для этого обычно используют:

  • Scheduler с выделенным пулом потоков для блокирующих операций (например, Schedulers.boundedElastic() в Reactor).
  • Вызов блокирующего метода выполняется внутри subscribeOn или publishOn с таким Scheduler.

Пример на Reactor:

Mono.fromCallable(() -> blockingDatabaseCall())
    .subscribeOn(Schedulers.boundedElastic())
    .map(result -> process(result))
    .subscribe();

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