Translate

jueves, 24 de julio de 2014

Parte 2 - Introducción a RabbitMQ


Indice 
Parte 1 - Introducción y objetivos 


Código del ejemplo

https://github.com/davsuapas/QueueService


Introducción a RabbitMQ



En RabbitMQ existen muchos patrones para tratar los mensajes, desde el punto de vista que a nosotros nos interesa utilizaremos el patrón publicador/subcriptor. Si nosotros trabajamos con software que utiliza redes nosotros podemos pensar en arquitectura cliente/servidor, envías una solicitud y recibes unas respuesta. El modelo que se plantea es una aplicación que consume servicios a través de mensajes, el rol de RabbitMQ consiste en-rutar los mensajes a los diferentes servicios. El productor envía un mensaje en cualquier formato al bróker de RabbitMQ y a diferencia de TCP que conoce tanto el emisor como el receptor, el productor en este caso no conoce del servicio que lo consumirá. Aquí entra en juego el bróker de RabbitMQ, que será capaz de entregar el mensaje al consumidor que pueda procesar ese mensaje. El caso del consumidor es muy sencillo se subscribe a una colas para consumir los diferentes mensajes.

Ilustración 1. Flujo del mensaje entre un publicador y un subscriptor en RabbitMQ

Antes de enviar un mensaje te tienes que conectar al bróker mediante una conexión TCP y enviar los mensajes a través de una canal. Un canal es una conexión virtual y no una conexión real. Esto es una característica interesante de RabbitMQ ya que permite realizar múltiples envíos concurrentemente por la misma conexión TCP. Los canales son independientes unos de otros.

Otra característica importante de los mensajes en RabbitMQ es la capacidad de entregar los mensajes utilizando reglas de enrutamiento. Esto nos permite decidir a qué colas se entregará un mensaje. Estas reglas son llamadas routing key. Una colas está unida a un routing key, cuando se envía un mensaje al bróker, el bróker enviará el mensaje a la cola dependiente de su routing key. Esto puede ser muy útil cuando queramos realizar multidifusión de mensajes por una determinada característica.
Otro aspecto importante de RabbitMQ son las colas. Las colas se pueden crear tanto por el consumidor como por el publicador y se pueden persistir en el tiempo. Por defecto y si no se indica lo contrario si el servidor de RabbitMQ se reinicia las colas se perderán, excepto si cuando creamos la colas indicamos que es duradera.

Por último hablaremos del mecanismo que tiene RabbitMQ para enterarse cuando un mensaje ha sido consumido. Cuando se envía un mensaje a una determinada cola del bróker, si existe un consumidor que este escuchando los mensajes de esta cola, el bróker envía el mensaje a dicho consumidor y el broker no borra este mensaje hasta que el consumidor le indique que el mensaje fue recibido correctamente mediante un ACK. Si el bróker no recibe este ACK y la conexión entre el bróker y el consumidor se rompe el bróker volverá a enviar este mensaje a otro consumidor disponible. Los mensajes pueden ser rechazados por un consumidor mediante un NACK.



Parte 3 - Entorno de desarrollo utilizado


No hay comentarios:

Publicar un comentario