RabbitMQ para principiantes

Dentro de un proyecto en ocasiones hay que integrarse con otros actores, componentes, o sistemas internos y externos, siendo necesario aportar o recibir información de ellos. En el mayor de los casos, estas comunicaciones tienen que estar permanentemente disponibles, ser rápidassegurasasíncronas y fiables entre otros requisitos.

RabbitMQ

Las colas de mensajes (MQ) solucionan estas necesidades, actuando de intermediario entre emisores y destinatarios, o en un contexto más definido, productores y consumidores de mensajes. Se pueden usar para reducir las cargas y los tiempos de entrega por parte de los servidores de aplicaciones web, ya que las tareas, que normalmente tardarían bastante tiempo en procesarse, se pueden delegar a un tercero cuyo único trabajo es realizarlas.

El uso de colas de mensajes también es bueno cuando se desea distribuir un mensaje a múltiples destinatarios para consumo o para realizar balanceo de carga entre trabajadores. Además aportan otros beneficios como:

Garantía de entrega y orden Los mensajes se consumen, en el mismo orden que se llegaron a la cola, y son consumidos una única vez
Redundancia Las colas persisten los mensajes hasta que son procesados por completo
Desacoplamiento Siendo capas intermedias de comunicación entre procesos, aportan la flexibilidad en la definición de arquitectura de cada uno de ellos de manera separada, siempre que se mantenga una interfaz común
Escalabilidad Con más unidades de procesamiento, las colas balancean su respectiva carga

¿Qué es RabbitMQ?

RabbitMQ es un software de encolado de mensajes llamado bróker de mensajería o gestor de colas. Dicho de forma simple, es un software donde se pueden definir colas, las aplicaciones se pueden conectar a dichas colas y transferir/leer mensajes en ellas. Sus características principales son:

Garantía de entrega Enrutamiento flexible Clusterización Federación Alta disponibilidad Tolerancia a fallos

¿Cómo funciona?

La arquitectura básica de una cola de mensajes es simple. Hay aplicaciones clientes, llamadas productores, que crean mensajes y los entregan al intermediario (la cola de mensajes). Otras aplicaciones, llamadas consumidores, se conectan a la cola y se suscriben a los mensajes que se procesarán. Un mensaje puede incluir cualquier tipo de información.

RabbitMQ workflow tutorial

RabbitMQ workflow tutorial

Un software puede ser un productor, consumidor, o productor y consumidor de mensajes simultáneamente. Los mensajes colocados en la cola se almacenan hasta que el consumidor los recupera y procesa.

Los mensajes no se publican directamente en una cola, en lugar de eso, el productor envía mensajes a un exchange. Los exchanges son agentes de enrutamiento de mensajes, definidos por virtual host dentro de RabbitMQ. Un exchange es responsable del enrutamiento de los mensajes a las diferentes colas: acepta mensajes del productor y los dirige a colas de mensajes con ayuda de atributos de cabeceras, bindings y routing keys.

  • Un binding es un “enlace” que se configura para vincular una cola a un exchange
  • La routing key es un atributo del mensaje. El exchange podría usar esta clave para decidir cómo enrutar el mensaje a las colas (según el tipo de exchange)

Los exchanges, las conexiones y las colas pueden configurarse con parámetros tales como durable, temporary, y auto delete en el momento de su creación. Los exchanges declarados como durable sobrevivirán a los reinicios del servidor y durarán hasta que se eliminen explícitamente. Aquellos de tipo temporary existen hasta que RabbitMQ se cierre. Por último, los exchanges configurados como auto delete se eliminan una vez que el último objeto vinculado se ha liberado del exchange.

Flujo de mensajes estándar de RabbitMQ

El productor publica un mensaje al exchange
El exchange recibe el mensaje y pasa a ser el responsable del enrutamiento del mensaje
Se debe establecer un binding entre la cola y el exchange. En el ejemplo, tenemos enlaces a dos colas diferentes desde el exchange. El exchange enruta el mensaje a las colas
Los mensajes permanecen en la cola hasta que sean manejados por un consumidor
El consumidor procesa el mensaje

 

Exchanges Bindings Routing Keys

Exchanges Bindings Routing Keys
Referencias

   ≡   RabbitMQ