[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-reactive-chto-takoe-reactive-streams-specification":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},994,"chto-takoe-reactive-streams-specification",31,"reactive","Reactive","⚡","Что такое Reactive Streams Specification?","Reactive Streams — спецификация, определяющая стандарт для асинхронной потоковой обработки данных с поддержкой неблокирующего backpressure. Разработана совместно инженерами Netflix, Pivotal, Lightbend и Oracle; с Java 9 включена в JDK как `java.util.concurrent.Flow`.\n\n### Четыре ключевых интерфейса\n\n```java\n\u002F\u002F 1. Publisher — источник данных\npublic interface Publisher\u003CT> {\n    void subscribe(Subscriber\u003C? super T> subscriber);\n}\n\n\u002F\u002F 2. Subscriber — потребитель данных\npublic interface Subscriber\u003CT> {\n    void onSubscribe(Subscription subscription); \u002F\u002F вызывается при подписке\n    void onNext(T item);                         \u002F\u002F получение элемента\n    void onError(Throwable throwable);           \u002F\u002F сигнал об ошибке (терминальный)\n    void onComplete();                           \u002F\u002F сигнал о завершении (терминальный)\n}\n\n\u002F\u002F 3. Subscription — связь Publisher-Subscriber, управление backpressure\npublic interface Subscription {\n    void request(long n); \u002F\u002F запросить n элементов\n    void cancel();        \u002F\u002F отменить подписку\n}\n\n\u002F\u002F 4. Processor — комбинация Publisher и Subscriber\npublic interface Processor\u003CT, R> extends Subscriber\u003CT>, Publisher\u003CR> {\n}\n```\n\n### Протокол взаимодействия\n\n1. Subscriber вызывает `publisher.subscribe(subscriber)`\n2. Publisher вызывает `subscriber.onSubscribe(subscription)`\n3. Subscriber вызывает `subscription.request(n)` — запрашивает n элементов\n4. Publisher вызывает `subscriber.onNext(item)` не более n раз\n5. Publisher завершает поток вызовом `onComplete()` или `onError()`\n\n### Реализации спецификации\n\n| Реализация | Компания | Где используется |\n|-----------|----------|-----------------|\n| Project Reactor | Pivotal\u002FVMware | Spring WebFlux |\n| RxJava | Netflix | Android-разработка |\n| Mutiny | Red Hat | Quarkus |\n| Akka Streams | Lightbend | Экосистема Akka |\n\n### Частые ошибки\n\n- Не вызывать `request(n)` — без запроса Publisher не отправит ни одного элемента\n- Вызывать `onNext` после терминального сигнала — нарушение протокола\n- Бросать исключения из `onNext` — вместо этого нужно вызвать `subscription.cancel()`\n- Путать `Flow` API из JDK и Reactive Streams API — интерфейсы идентичны, но в разных пакетах\n\n### Как используется в 2026\n\n- Reactive Streams — зрелый стандарт, входящий в JDK\n- Project Reactor — доминирующая реализация в Spring-экосистеме\n- С появлением Virtual Threads (Java 21) часть задач решается проще через виртуальные потоки\n- Reactive Streams незаменимы для streaming-сценариев (SSE, WebSocket, Kafka) и работы с backpressure\n\n> **На собеседовании:** ключевое — назвать четыре интерфейса и объяснить протокол, особенно роль request(n) в backpressure. Частая ошибка — знать только Mono\u002FFlux из Reactor, но не понимать, что под ними лежит стандартная спецификация с чётким протоколом.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Что такое Reactive Streams Specification? — Gymterview","Reactive Streams — спецификация, определяющая стандарт для асинхронной потоковой обработки данных с поддержкой неблокирующего backpressure. Разработана совместн","Reactive Streams — спецификация, определяющая стандарт для асинхронной потоковой обработки данных с поддержкой неблокиру",[7,13],"Reactive Streams — спецификация, определяющая стандарт для асинхронной потоковой обработки данных с поддержкой неблокирующего backpressure. Разработана совместно инженерами Netflix, Pivotal, Lightbend и Oracle; с Java 9 включена в JDK как `java.util.concurrent.Flow`.",true]