RX vs colas de mensajería como rabbitmq o zeromq? [cerrado]


Soy bastante nuevo en estos paradigmas de concurrencia de alto nivel, y he comenzado a usar los enlaces scala RX. Así que estoy tratando de entender cómo RX difiere de colas de mensajería como RabbitMQ o ZeroMQ?

Ambos parecen usar el paradigma subscribe/publish. En algún lugar vi un tweet sobre RX corriendo encima de RabbitMQ.

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

Author: Luciano, 2013-12-23

2 answers

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

Desde la introducción se 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 al estilo LINQ. Sistema.Reactive es el espacio de nombres raíz utilizado a través de la biblioteca. Usando Rx, los desarrolladores representan flujos de datos asíquronos usando Operadores LINQ, y parametrizar la concurrencia en los flujos de datos asíncronos utilizando Schedulers. En pocas palabras, Rx = Observables + LINQ + Schedulers.

Por lo tanto, Rx y message queueeing son realmente distintas tecnologías que pueden complementarse bastante bien. Un ejemplo clásico es un servicio de cotización de precios de acciones - esto podría ser entregado a través de message queue server, pero luego transformado por Rx a precios de grupo, agregados y filtros.

Puede ir más allá: tanto como Entity Framework se convierte Las consultas IQueryable<T> en SQL se ejecutan directamente en la base de datos, puede crear proveedores que conviertan las consultas Rx IQbservable<T> en consultas nativas; por ejemplo, un filtro Where podría aprovechar la capacidad de filtrado nativa que existe en muchas tecnologías de message queueing para aplicar filtros directamente. Sin embargo, esto es mucho trabajo y duro.

Es mucho más fácil, y no es raro ver los mensajes de la cola de mensajes alimentados en un Rx Subject para que los mensajes entrantes de una cola se transformen en un flujo Rx para fácil consumo en el cliente. Rx también se utiliza ampliamente en GUI para trabajar con eventos del lado del cliente como pulsaciones de botones y cambios de cuadro de texto para hacer escenarios tradicionalmente difíciles como arrastrar y soltar y autocompletado de texto a través de consultas de servidor asíncronas dramáticamente más fácil. Hay buenas manos en el laboratorio cubriendo el escenario posterior aquí . Fue escrito en contra de un lanzamiento anticipado de Rx, pero sigue siendo muy relevante.

Recomiendo mirar este video de presentación de Bart de Smet para una introducción fantástica: Curando Su Blues de Procesamiento de eventos con Reactive Extensions (Rx) - incluyendo la demostración clásica de Rx que escribe una consulta sobre una transmisión en vivo de Kinect para interpretar el saludo manual!

 22
Author: James World,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:17:47

¿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.

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

 8
Author: Paul Betts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-23 18:26:44