Sobes.tech
Назад к вопросам
Senior
18

Как подписаться на Flux/Mono в реактивном программировании? Какие варианты существуют?

Компании, где спрашивали
IT OneIT One

Ответ от нейросети

sobes.tech AI

В реактивном программировании на Java с использованием Project Reactor для подписки на Flux или Mono существуют несколько вариантов:

  1. Метод subscribe() — базовый способ подписаться и обработать элементы, ошибки и завершение:
flux.subscribe(
    value -> System.out.println("Получено: " + value),
    error -> System.err.println("Ошибка: " + error),
    () -> System.out.println("Завершено")
);
  1. Использование Consumer для обработки только значений:
mono.subscribe(value -> System.out.println("Результат: " + value));
  1. Подписка с Disposable:
Disposable disposable = flux.subscribe();
// Можно отменить подписку позже
disposable.dispose();
  1. Подписка с использованием операторов doOnNext, doOnError, doOnComplete для побочных эффектов:
flux
  .doOnNext(value -> System.out.println("Получено: " + value))
  .doOnError(error -> System.err.println("Ошибка: " + error))
  .doOnComplete(() -> System.out.println("Завершено"))
  .subscribe();
  1. Подписка с использованием Subscriber:

Можно реализовать интерфейс Subscriber для более тонкого контроля над подпиской, например, управление запросом элементов (backpressure).

flux.subscribe(new BaseSubscriber<>() {
    @Override
    protected void hookOnNext(T value) {
        System.out.println("Получено: " + value);
        request(1); // Запрашиваем следующий элемент
    }
});

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