Что такое Project Reactor и его основные компоненты?

«Что такое Project Reactor и его основные компоненты?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Project Reactor — это реактивная библиотека для JVM, реализующая спецификацию Reactive Streams. Она предоставляет неблокирующую модель программирования для асинхронных потоков данных.

Основные абстракции:

  • Mono<T> — представляет асинхронный результат 0 или 1 элемента.
  • Flux<T> — представляет асинхронную последовательность из 0..N элементов.

Пример создания и обработки потока:

Flux.just("Apple", "Banana", "Cherry")
    .filter(fruit -> fruit.length() > 5)
    .map(String::toUpperCase)
    .doOnNext(System.out::println)
    .subscribe(); // Подписка активирует поток

Ключевые особенности:

  • Ленивость (Lazy): Вычисления начинаются только после вызова subscribe().
  • Богатый набор операторов: map, filter, flatMap, zip, merge, concat для трансформации и комбинирования потоков.
  • Обработка ошибок: Специальные операторы onErrorResume, onErrorReturn, doOnError.
  • Расписание (Schedulers): Контроль над потоком выполнения (Schedulers.parallel(), subscribeOn, publishOn).
  • Backpressure: Механизм, позволяющий подписчику контролировать скорость получения данных от издателя.

Применение: Используется в стеке Spring WebFlux для создания реактивных REST API, с реактивными драйверами баз данных (R2DBC), и клиентами (WebClient, реактивный Kafka).