Ответ
Project Reactor — это библиотека для построения неблокирующих (non-blocking) реактивных приложений на JVM, реализующая спецификацию Reactive Streams. Она предоставляет абстракции для асинхронной обработки потоков данных с обратным давлением (backpressure).
Основные абстракции:
Mono<T>— представляет асинхронную операцию, которая выдаст 0 или 1 результат.Flux<T>— представляет асинхронную последовательность, которая может выдать от 0 до N результатов.
Простой пример:
Flux<String> flux = Flux.just("Hello", "Reactive", "World")
.delayElements(Duration.ofMillis(100)) // Неблокирующая задержка
.map(String::toUpperCase)
.filter(word -> word.length() > 5);
flux.subscribe(
word -> System.out.println("Next: " + word), // onNext
error -> System.err.println("Error: " + error), // onError
() -> System.out.println("Completed!") // onComplete
);
Ключевые особенности и применение:
- Неблокирующий ввод/вывод: Позволяет эффективно обслуживать тысячи одновременных соединений с малым числом потоков.
- Обратное давление (Backpressure): Подписчик может контролировать скорость получения данных от издателя.
- Функциональный API: Богатый набор операторов (
map,filter,flatMap,zip,merge). - Ленивые вычисления: Выполнение начинается только после вызова
subscribe(). - Интеграция с экосистемой: Является основой для Spring WebFlux, реактивных драйверов БД (MongoDB, Cassandra) и клиентов (WebClient).
Типичные use-cases: высоконагруженные микросервисы, обработка потоков событий, реальные обновления данных.