rabbitmq system.reactive zeromq reactive-programming

¿RX vs colas de mensajería como rabbitmq o zeromq?



system.reactive reactive-programming (2)

¿Podría alguien explicar las diferencias entre RX y estas otras colas de mensajería?

Rx es simplemente una abstracción sobre Eventos (¡cualquier tipo de evento!). Recibir un mensaje de una cola distribuida es un Evento y, a menudo, las soluciones ZeroMQ / RabbitMQ a menudo tienen que usar y combinar diferentes Eventos bastante, lo que Rx es muy bueno.

Muy a menudo, Rx hace que escribir aplicaciones ZeroMQ / RabbitMQ sea mucho más fácil de lo que sería de otra manera :)

Soy bastante nuevo en estos paradigmas de concurrencia de alto nivel, y comencé a usar los enlaces Scala RX. Entonces, ¿estoy tratando de entender en qué se diferencia RX de las colas de mensajería como RabbitMQ o ZeroMQ?

Ambos parecen usar el paradigma suscribirse / publicar. En algún lugar vi un tweet sobre RX ejecutándose sobre RabbitMQ.

¿Podría alguien explicar las diferencias entre RX y las colas de mensajería? ¿Por qué elegiría uno sobre el otro? ¿Se puede sustituir uno por el otro o son mutuamente excluyentes? ¿En qué áreas se superponen?


Vale la pena hacer clic en el enlace de más información en la etiqueta [system.reactive] un poco de información allí!

Desde la introducción, puede ver que Rx no es una tecnología de cola de mensajes:

Las Extensiones reactivas (Rx) es una biblioteca para componer programas asíncronos y basados ​​en eventos utilizando secuencias observables y operadores de consulta de estilo LINQ. System.Reactive es el espacio de nombres raíz utilizado a través de la biblioteca. Usando Rx, los desarrolladores representan flujos de datos asíncronos usando operadores LINQ, y parametrizan la concurrencia en los flujos de datos asíncronos usando Programadores. En pocas palabras, Rx = Observables + LINQ + Schedulers.

Por lo tanto, Rx y la cola de mensajes son tecnologías realmente distintas que pueden complementarse bastante bien. Un ejemplo clásico es un servicio de cotización de precios de las acciones, que puede ser entregado a través de la cola de mensajes, pero luego transformado por Rx para agrupar, agregar y filtrar los precios.

Puede ir más lejos: al igual que Entity Framework convierte las consultas IQueryable<T> en SQL ejecutadas directamente en la base de datos, puede crear proveedores que conviertan las consultas Rx IQbservable<T> en consultas nativas; por ejemplo, un filtro Where puede aprovechar la capacidad de filtrado nativo. que existe en muchas tecnologías de colas de mensajes para aplicar filtros directamente. Sin embargo, esto es bastante trabajo y difícil.

Es mucho más fácil, y no infrecuente, ver los mensajes de la cola de mensajes en un Subject Rx, de modo que los mensajes entrantes de una cola se transformen en un flujo Rx para un fácil consumo en el cliente. Rx también se usa ampliamente en las GUI para trabajar con eventos del lado del cliente como presionar botones y cambios de cuadros de texto para hacer que los escenarios tradicionalmente difíciles como arrastrar y soltar y la autocompletar texto a través de consultas de servidor asíncrono sean mucho más fáciles. Hay buenas manos en el laboratorio que cubren el último escenario here . Fue escrito en contra de un lanzamiento temprano de Rx, pero aún así es muy relevante.

Recomiendo mirar esta presentación en video de Bart de Smet para una introducción fantástica: Curar los blues de procesamiento de eventos con extensiones reactivas (Rx) , incluida la demostración de Rx clásica que escribe una consulta en una transmisión en vivo de Kinect para interpretar el saludo de la mano.