Первый выпуск | 15 мая 2015 г . |
---|---|
Стабильный выпуск | 1.0.3 / 23 августа 2019 г . |
Репозиторий | github |
Написано в | Java (Scala, Groovy, Kotlin), .NET. |
Веб-сайт | реактивные потоки |
Реактивные Потоки является инициативой обеспечить стандарт для асинхронной обработки потока с неблокирующим обратным давлением. [1]
Происхождение [ править ]
Реактивные потоки начались в конце 2013 года как инициатива инженеров Netflix , Pivotal и Lightbend . Некоторые из самых ранних дискуссий начались в 2013 году между командами Play и Akka в Lightbend. [2] [3] Lightbend - один из основных разработчиков Reactive Streams. [4] Среди других участников - Red Hat , Oracle , Twitter и spray.io. [5]
Цели [ править ]
Основная цель Reactive Streams - управлять обменом потоковыми данными через асинхронную границу - например, передача элементов другому потоку или пулу потоков - при обеспечении того, чтобы принимающая сторона не была вынуждена буферизовать произвольные объемы данных. Другими словами, обратное давление является неотъемлемой частью этой модели, позволяющей ограничивать очереди, которые являются посредниками между потоками .
Целью спецификации является создание множества соответствующих реализаций , которые в силу соблюдения правил смогут беспрепятственно взаимодействовать , сохраняя упомянутые преимущества и характеристики на всем графе обработки потокового приложения. Вместе со спецификацией был разработан свободно доступный комплект Technology Compatibility Kit [6], который позволяет разработчикам спецификации проверять, покрывают ли они все правила и требования, включая проверку возможных состояний гонки.
Объем Reactive Streams - это минимальный набор интерфейсов , методов и протоколов, которые описывают необходимые операции и сущности для достижения асинхронных потоков данных с неблокирующим обратным давлением. Конечные пользователи DSL или API привязки протоколов были намеренно исключены из области применения, чтобы поощрять и позволять различным реализациям, которые потенциально используют разные языки программирования, оставаться максимально верными идиомам своей платформы.
Включение в стандарт Java [ править ]
Спецификация разработана с целью включения в будущем в официальную стандартную библиотеку Java, если она окажется успешной и будет принята достаточным количеством библиотек и поставщиков.
Реактивные потоки были предложены стать частью Java 9 Дугом Ли , лидером JSR 166 [7], в качестве нового класса Flow [8], который будет включать интерфейсы, которые в настоящее время предоставляются Reactive Streams. [4] [9] После успешного выпуска 1.0 Reactive Streams и растущего внедрения предложение было принято, и Reactive Streams был включен в JDK9 через JEP- 266. [9]
Принятие [ править ]
30 апреля 2015 версии 1.0.0 реактивных потоков для JVM был выпущен, [4] [5] [10] в том числе Java API , [11] текстовая спецификация , [12] TCK и примеры реализации. Он поставляется с множеством совместимых реализаций, проверенных TCK для 1.0.0, перечисленных в алфавитном порядке: [10]
- Ручьи Акка [13] [14]
- MongoDB [15]
- Крысиная стая [16]
- Reactive Rabbit - драйвер для RabbitMQ / AMQP
- Пружина и реактор основного проекта [17]
- Netflix RxJava [18]
- Slick 3.0 [19] [20]
- Vert.x 3.0 [21]
Другие реализации включают Cassandra , [22] Elasticsearch , [23] Apache Kafka , [24] Parallel Universe Quasar, [25] Play Framework , [26] Armeria. [27]
Сообщается, что Spring 5 будет построен на базе Reactor Core, совместимой с Reactive Streams. [28]
Amazon объявила, что ее SDK Amazon Web Services будет поддерживать Reactive Streams для обеспечения потоковых возможностей в своих клиентских библиотеках в версии 2.0. [29]
Reactive Streams 1.0.1 выпущен 9 августа 2017 года, включая различные улучшения в точности спецификации, улучшения TCK и другие пояснения. Спецификация, а также интерфейсы оставались полностью обратно совместимыми с версией 1.0.0, однако были направлены на упрощение внедрения для будущих разработчиков, а также на согласование с некоторыми дополнительными требованиями, установленными OpenJDK. [30]
Порты и влияния [ править ]
- Прямой перенос спецификации, интерфейсов и TCK был предоставлен той же рабочей группе для платформы .NET . [31]
- Когда язык Elixir представил свой потоковый API под названием GenStage, авторы выразили благодарность «[проектам] akka-streams и reactive-streams, которые предоставили нам руководство по реализации обмена между этапами по запросу». [32]
Ссылки [ править ]
- ^ reactive-streams.org
- ^ Путешествие в реактивные потоки
- ^ Интервью Reactive Streams 1.0.0
- ^ a b c Реактивные потоки выпускают первую стабильную версию для JVM
- ^ a b Reactive Streams 1.0.0 - новый стандарт в реактивной обработке данных
- ^ «Реактивные потоки TCK» .
- ^ jdk9 Кандидатские классы Flow и SubmissionPublisher
- ^ java.util.concurrent.Flow
- ^ a b JEP 266: Дополнительные обновления параллелизма
- ^ a b Реактивные потоки 1.0.0 уже здесь!
- ^ Java API
- ^ Реактивные потоки для спецификации JVM
- ^ InfoQ: Реактивные потоки с потоками Akka
- ^ Принципы проектирования, лежащие в основе Akka Streams
- ^ Драйвер Java для реактивных потоков MongoDB
- ^ Ratpack: API реактивных потоков
- ^ Доступен Reactor 2.0.0.RC1 с нативной поддержкой Reactive Streams!
- ^ Advanced RxJava: API реактивных потоков (часть 1)
- ^ Слайд 3: Реактивные потоки для асинхронного доступа к базе данных в Scala
- ^ Slick 3.0.0
- ^ Интеграция реактивных потоков Vert.x
- ^ Доступ к Кассандре в реакционно Пути
- ^ elastic4s - Неблокирующий, типобезопасный клиент DSL и Scala для Elasticsearch
- ^ Реактивные потоки для Apache Kafka
- ^ Квазар и реактивные потоки
- ^ Play Framework - интеграция реактивных потоков (экспериментальная)
- ^ Armeria - полностью асинхронный и реактивный
- ^ Реактивная пружина
- ^ "Объявление о предварительной версии AWS SDK для разработчиков Java 2.0" .
- ^ "Объявление о выпуске Reactive Streams 1.0.1" .
- ^ "Реактивные потоки .NET" .
- ^ "Блог Elixir: Объявление GenStage" .
- Эта статья включает текст с сайта www .reactive-streams .org , который выпущен в рамках универсального (CC0 1.0) выделения общественному достоянию CC0 1.0 .