test streams rxjava example docs java akka reactive-programming rx-java project-reactor

java - streams - reactor test



Comparación de los marcos reactivos de Java (1)

Estoy trabajando en RxJava e hice algunas evaluations en Akka-Streams y Reactor recientemente.

Hasta donde puedo decir con todas las bibliotecas, convergen en un solo concepto llamado Reactive-Streams para que pueda ir y venir entre las implementaciones.

Creo que RxJava es el más genérico de todos, tiene cero dependencias en otras bibliotecas y no tiene opiniones sobre la concurrencia. Es muy popular en Android debido principalmente al soporte de otras bibliotecas / marcos como Retrofit. La rama 1.x no implementa Reactive-Streams, pero tiene envoltorios para ella mientras que 2.x es nativamente compatible con Reactive-Streams (actualmente disponible en la vista previa). Muchos lenguajes de programación populares basados ​​en JVM tienen adaptadores para ello (Scala, Kotlin, Clojure, etc.).

Reactor es compatible con Reactive-Streams, ya que es una biblioteca más reciente. Tienen dependencias / soporte para muchas otras bibliotecas. Escogieron un conjunto diferente de compensaciones cuando se trata de la concurrencia y la puesta en cola en las secuencias (es decir, el estilo de LMAX Disruptor). Hubo algunos intentos entre RxJava y RxJava con respecto a los operadores y hemos empezado a hablar de tener un grupo de operadores compartido.

Akka está muy dominado por conceptos similares a Scala; Tuve un pequeño problema para que funcionara. El equipo detrás de él estuvo involucrado en el desarrollo de la especificación Reactive-Streams y hay una biblioteca Akka-Streams que se anuncia para respaldar Reactive-Streams, sin embargo, acceder a ella es engorroso porque su API fluida está fuertemente relacionada con el modelo de actor Akka.

Si está en el lado del servidor / escritorio / Android, RxJava es generalmente una buena opción (y creo que está documentado mejor que los otros) y está dirigido a operaciones asíncronas de alto rendimiento. Si estás más en el lado de la latencia, Reactor podría ser una mejor opción. No sé mucho acerca de los usos de Akka-Streams, pero vi un punto de referencia hace un año en el que un servidor web creado alrededor de Akka superó a Tomcat y Netty + RxJava.

Veo muchos marcos / bibliotecas que afirman que pueden ayudar a construir aplicaciones reactivas en Java, como: Akka, Vert.x, RxJava, Reactor, QBit, etc.

Parece que tienen diferentes enfoques, características, ventajas, desventajas, etc. No pude encontrar comparaciones detalladas. Hay documentación sobre cada uno de estos marcos, pero no es suficiente para mí entender las diferencias.

¿Cuáles son las diferencias entre los principales marcos reactivos de Java?

¿Y cuáles son los requisitos de la aplicación que pueden impulsar la elección de un marco reactivo de Java?

Gracias por tu tiempo.