Reactive Streams es una iniciativa para proporcionar un estándar para el procesamiento de flujo asíncrono con contrapresión sin bloqueo . [1]
Versión inicial | 15 de mayo de 2015 |
---|---|
Lanzamiento estable | 1.0.3 / 23 de agosto de 2019 |
Repositorio | github |
Escrito en | Java (Scala, Groovy, Kotlin), .NET |
Sitio web | corrientes-reactivas |
Origen
Reactive Streams comenzó como una iniciativa a fines de 2013 entre ingenieros de Netflix , Pivotal y Lightbend . Algunas de las primeras discusiones comenzaron en 2013 entre los equipos de Play y Akka en Lightbend. [2] [3] Lightbend es uno de los principales contribuyentes de Reactive Streams. [4] Otros contribuyentes incluyen Red Hat , Oracle , Twitter y spray.io. [5]
Metas
El objetivo principal de Reactive Streams es gobernar el intercambio de datos de flujo a través de un límite asincrónico, como pasar elementos a otro subproceso o grupo de subprocesos , al tiempo que se garantiza que el lado receptor no se vea obligado a almacenar en búfer cantidades arbitrarias de datos. En otras palabras, la contrapresión es una parte integral de este modelo para permitir que las colas que median entre hilos estén delimitadas .
La intención de la especificación es permitir la creación de muchas implementaciones conformes , que en virtud de cumplir con las reglas podrán interoperar sin problemas, preservando los beneficios y características mencionados en todo el gráfico de procesamiento de una aplicación de flujo. Junto con la especificación, se desarrolló un kit de compatibilidad tecnológica disponible gratuitamente [6] que permite a los implementadores de la especificación verificar si cubren todas las reglas y requisitos, incluidas las verificaciones de posibles condiciones de carrera.
El alcance de Reactive Streams es un conjunto mínimo de interfaces , métodos y protocolos que describen las operaciones y entidades necesarias para lograr los flujos de datos asíncronos con contrapresión sin bloqueo. Los DSL de usuario final o las API de enlace de protocolos se han dejado a propósito fuera del alcance para alentar y habilitar diferentes implementaciones que potencialmente usan diferentes lenguajes de programación para mantenerse lo más fieles posible a los modismos de su plataforma.
Inclusión en el estándar Java
La especificación se desarrolló con la intención de incluirla en el futuro en la biblioteca estándar oficial de Java, si tiene éxito y es adoptada por suficientes bibliotecas y proveedores.
Doug Lea , líder de JSR 166 [7], propuso que Reactive Streams se convirtiera en parte de Java 9 como una nueva clase de Flow [8] que incluiría las interfaces proporcionadas actualmente por Reactive Streams. [4] [9] Después de una versión 1.0 exitosa de Reactive Streams y una creciente adopción, la propuesta fue aceptada y Reactive Streams se incluyó en JDK9 a través del JEP -266. [9]
Adopción
El 30 de abril de 2015 se lanzó la versión 1.0.0 de Reactive Streams para la JVM , [4] [5] [10] incluida la API de Java , [11] una especificación textual , [12] un TCK y ejemplos de implementación. Viene con una multitud de implementaciones compatibles verificadas por TCK para 1.0.0, enumeradas en orden alfabético: [10]
- Akka Streams [13] [14]
- MongoDB [15]
- Ratpack [16]
- Reactive Rabbit - controlador para RabbitMQ / AMQP
- Reactor de proyecto de primavera y pivote [17]
- Netflix RxJava [18]
- Slick 3.0 [19] [20]
- Vert.x 3,0 [21]
Otras implementaciones incluyen Cassandra , [22] Elasticsearch , [23] Apache Kafka , [24] Parallel Universe Quasar, [25] Play Framework , [26] Armeria. [27]
Se anuncia que Spring 5 se basará en Reactor Core compatible con Reactive Streams. [28]
Amazon anunció que su SDK de servicios web de Amazon admitiría Reactive Streams para proporcionar capacidades de transmisión en sus bibliotecas cliente en la versión 2.0. [29]
Reactive Streams 1.0.1 se lanzó el 9 de agosto de 2017, incluidas varias mejoras en la precisión de las especificaciones, mejoras de TCK y otras aclaraciones. La especificación y las interfaces siguieron siendo totalmente compatibles con la versión 1.0.0, sin embargo, su objetivo era agilizar la adopción para futuros implementadores y alinearse con algunos requisitos adicionales establecidos por OpenJDK. [30]
Puertos e influencias
- Un puerto directo de la especificación, interfaces y TCK se puso a disposición bajo el mismo grupo de trabajo para la plataforma .NET . [31]
- Cuando el lenguaje Elixir introdujo su API de transmisión llamada GenStage, los autores agradecieron "[a] los proyectos akka-streams y reactive-streams que nos proporcionaron una guía para implementar el intercambio impulsado por la demanda entre etapas". [32]
Referencias
- ^ reactive-streams.org
- ^ Un viaje hacia corrientes reactivas
- ^ Entrevista Reactive Streams 1.0.0
- ^ a b c Reactive Streams lanza la primera versión estable para JVM
- ^ a b Reactive Streams 1.0.0: un nuevo estándar en el procesamiento de datos reactivos
- ^ "Corrientes reactivas TCK" .
- ^ jdk9 Candidate classes Flow and SubmissionPublisher
- ^ java.util.concurrent.Flow
- ^ a b JEP 266: Más actualizaciones de simultaneidad
- ^ a b Reactive Streams 1.0.0 ya está aquí.
- ^ API de Java
- ^ Flujos reactivos para la especificación JVM
- ^ InfoQ: Flujos reactivos con Akka Streams
- ^ Principios de diseño detrás de Akka Streams
- ^ Controlador Java de secuencias reactivas de MongoDB
- ^ Ratpack: API de flujos reactivos
- ^ ¡ Reactor 2.0.0.RC1 con soporte nativo de Reactive Streams ahora disponible!
- ^ RxJava avanzado: la API de flujos reactivos (parte 1)
- ^ Slick 3: Flujos reactivos para acceso asincrónico a bases de datos en Scala
- ^ Slick 3.0.0
- ^ Integración de flujos reactivos Vert.x
- ^ Accediendo a Cassandra de forma reactiva
- ^ elastic4s: cliente de Scala y DSL seguro de tipos sin bloqueo para Elasticsearch
- ^ Flujos reactivos para Apache Kafka
- ^ Quasar y corrientes reactivas
- ^ Play Framework - Integración de Reactive Streams (experimental)
- ^ Armeria: completamente asincrónico y reactivo
- ^ Resorte reactivo
- ^ "Anuncio de vista previa para desarrolladores de AWS SDK para Java 2.0" .
- ^ "Anuncio de lanzamiento de Reactive Streams 1.0.1" .
- ^ "Flujos reactivos .NET" .
- ^ "Blog de Elixir: anunciando GenStage" .
- Este artículo incorpora texto de www .reactive-streams .org , que se publica bajo una Dedicación de dominio público CC0 1.0 Universal (CC0 1.0) .