Ответ
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).