Gymterview
middle

Что такое Reactive Streams Specification?

Reactive Streams — спецификация, определяющая стандарт для асинхронной потоковой обработки данных с поддержкой неблокирующего backpressure. Разработана совместно инженерами Netflix, Pivotal, Lightbend и Oracle; с Java 9 включена в JDK как java.util.concurrent.Flow.

Четыре ключевых интерфейса

Пример
// 1. Publisher — источник данных
public interface Publisher<T> {
    void subscribe(Subscriber<? super T> subscriber);
}

// 2. Subscriber — потребитель данных
public interface Subscriber<T> {
    void onSubscribe(Subscription subscription); // вызывается при подписке
    void onNext(T item);                         // получение элемента
    void onError(Throwable throwable);           // сигнал об ошибке (терминальный)
    void onComplete();                           // сигнал о завершении (терминальный)
}

// 3. Subscription — связь Publisher-Subscriber, управление backpressure
public interface Subscription {
    void request(long n); // запросить n элементов
    void cancel();        // отменить подписку
}

// 4. Processor — комбинация Publisher и Subscriber
public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {
}

Протокол взаимодействия

  1. Subscriber вызывает publisher.subscribe(subscriber)
  2. Publisher вызывает subscriber.onSubscribe(subscription)
  3. Subscriber вызывает subscription.request(n) — запрашивает n элементов
  4. Publisher вызывает subscriber.onNext(item) не более n раз
  5. Publisher завершает поток вызовом onComplete() или onError()

Реализации спецификации

Реализация Компания Где используется
Project Reactor Pivotal/VMware Spring WebFlux
RxJava Netflix Android-разработка
Mutiny Red Hat Quarkus
Akka Streams Lightbend Экосистема Akka

Частые ошибки

  • Не вызывать request(n) — без запроса Publisher не отправит ни одного элемента
  • Вызывать onNext после терминального сигнала — нарушение протокола
  • Бросать исключения из onNext — вместо этого нужно вызвать subscription.cancel()
  • Путать Flow API из JDK и Reactive Streams API — интерфейсы идентичны, но в разных пакетах

Как используется в 2026

  • Reactive Streams — зрелый стандарт, входящий в JDK
  • Project Reactor — доминирующая реализация в Spring-экосистеме
  • С появлением Virtual Threads (Java 21) часть задач решается проще через виртуальные потоки
  • Reactive Streams незаменимы для streaming-сценариев (SSE, WebSocket, Kafka) и работы с backpressure

На собеседовании: ключевое — назвать четыре интерфейса и объяснить протокол, особенно роль request(n) в backpressure. Частая ошибка — знать только Mono/Flux из Reactor, но не понимать, что под ними лежит стандартная спецификация с чётким протоколом.