Rabbitmq: entrega rápida de mensajes

En el área de TI, los diferentes sistemas están constantemente enviando o recibiendo mensajes. Esto debe llevarse a cabo de forma controlada para que los mensajes no se bloqueen entre sí, acaben creando un atasco y los procesos no puedan funcionar de forma óptima. Con el fin de que las aplicaciones puedan comunicarse entre sí de manera sencilla, tiene sentido crear un intermediario, es decir, un servicio que se encargue de gestionar la distribución de los mensajes: esto es lo que se conoce como bróker de mensajería. Te presentamos Rabbitmq, uno de los más conocidos.

¿Qué es Rabbitmq?

Rabbitmq está basado en la idea del protocolo AMQP (Advanced Message Queuing Protocol), cuya gran ventaja es que emisores y destinatarios no tienen por qué entender el mismo lenguaje de programación. Entretanto, este bróker de mensajería se ha ido separando de AMQP y, gracias a los plugins, soporta también otros protocolos de mensajería como STOMP y MQTT. No obstante, la idea sigue siendo la misma: la existencia de una cola entre el emisor y el receptor del mensaje. Los mensajes colocados en la cola se almacenan temporalmente.

Hecho

En este contexto, el término “mensaje” se utiliza con un sentido muy amplio. Los mensajes pueden ser instrucciones a programas externos o mensajes de texto reales. Es decir, cualquier forma de transferencia de información puede llevarse a cabo mediante Rabbitmq u otros brókers de mensajería.

La ventaja de Rabbitmq radica en que el emisor del mensaje lo envía a la cola. En este punto, es el bróker de mensajería el que se encarga de él, por lo que el emisor puede dedicarse a una nueva tarea sin tener que esperar a que el mensaje llegue al receptor. Con este sistema, el mensaje permanece en la cola y el receptor puede recogerlo más tarde. Para entonces, es posible que el emisor ya se esté dedicando a una nueva tarea. Es decir, se trata de una comunicación asíncrona: los emisores y los destinatarios no tienen por qué ir al mismo ritmo.

Implementación con Rabbitmq

En la transmisión de los mensajes participan cuatro estaciones:

  • Productor: crea los mensajes
  • Intercambiador: entrega los mensajes
  • Cola: almacena los mensajes
  • Consumidor: procesa el mensaje

El productor publica un mensaje, pero no lo envía directamente al consumidor, sino que lo entrega al intercambiador. En esta estación se distribuyen los mensajes por las diferentes colas, que sirven de punto de lectura de un mensaje para un consumidor. Tanto el intercambiador como las colas forman parte de Rabbitmq y son administrados por el software. Para que los mensajes lleguen al destinatario correcto, se utilizan claves de enrutamiento, esto es, un atributo que el emisor añade a la cabecera del mensaje y funciona como una dirección. Gracias a ella, el intercambiador sabe adónde enrutar el mensaje.

Entre la cola y el intercambiador, se debe establecer una vinculación, es decir, un enlace que se configura para vincular una cola a un intercambiador y que sirve también para definir los parámetros conforme a los cuales un mensaje debe enviarse. Existen cuatro tipos básicos de mensajes que pueden distribuirse.

Intercambiador directo

Un intercambiador directo se produce cuando hay una conexión directa entre un emisor y un destinatario. El productor envía el mensaje a la cola cuya clave de vinculación sea idéntica a la clave de enrutamiento del mensaje. Es decir, solo una cola coincide exactamente con la clave de enrutamiento del mensaje que, a su vez, suele ser utilizada por un solo consumidor.

Intercambiador de un tema

Este tipo de intercambio amplía el concepto del intercambiador directo. En vez de basarse en un solo parámetro (clave de enrutamiento = clave de vinculación), los mensajes pueden dirigirse a varias colas. Para ello, se recurre a los comodines. En consecuencia, algunas colas o claves de vinculación son aceptadas, pero otras son descartadas.

Intercambiador de abanico

El intercambiador de abanico funciona como una transmisión. Los mensajes se distribuyen a todas las colas enlazadas, y no se realiza ninguna clasificación. Las claves de enrutamiento proporcionadas se ignoran simplemente.

Intercambiador de encabezamientos

En el caso de un intercambiador de encabezamiento, las claves de enrutamiento proporcionadas también son ignoradas. En cambio, la cabecera del mensaje desempeña un papel importante. Dentro de la cabecera, el intercambiador encuentra los atributos necesarios para decidir cuáles son las colas correctas. En este sentido, podemos decir que un intercambiador de encabezamientos y un intercambiador de un tema funcionan de la misma manera, ya que los dos pueden dirigirse a varias colas, si bien no a todas a la vez.

El consumidor, es decir, el programa que escucha, se conecta a determinadas colas y desde ellas procesa los mensajes. Esto explica que a cada cola solo se le asigne un consumidor. Si se extrajeran varios mensajes de una cola, no se podría garantizar una distribución correcta de los mismos. Opcionalmente, puedes establecer mensaje a mensaje si el destinatario tiene que acusar recibo o si no es necesario.

Rabbitmq en acción

Rabbitmq es un servidor de código abierto escrito en el lenguaje de programación Erlang. Desde su página oficial se puede descargar para Linux, BSD, Unix, Windows y macOS. Asimismo, se recomienda utilizar plugins para facilitar el trabajo con este bróker de mensajería y ampliar sus funcionalidades. El primero y el más importe es el management plugin, que está incluido en la instalación estándar, aunque es necesario activarlo. Gracias a este plugin, los usuarios pueden administrar Rabbitmq desde una interfaz gráfica de usuario (GUI), controlar los mensajes de las colas y visualizar estadísticas.

Otro plugin importante es Shovel, que permite conectar dos brókers de mensajería entre sí, lo que resulta muy útil para, por ejemplo, distribuir mejor la carga. También sirve para trasladar grandes cantidades de datos o datos confidenciales, por ejemplo, por razones de seguridad, a una red totalmente diferente.

La comunicación se produce mediante TCP, lo que explica que se utilicen puertos en Rabbitmq. Es necesario que los puertos no estén cerrados ni bloqueados por otras aplicaciones. La documentación de Rabbitmq incluye una lista en la que se detallan todos los puertos utilizados.

Hecho

La característica más destacable de Rabbitmq es su arquitectura ligera. Este bróker de mensajería es rápido y resulta muy útil en muchas situaciones. No obstante, para proyectos de gran envergadura, los desarrolladores y los administradores se decantan por Apache Kafka.


¡No te vayas! ¡Tenemos algo para ti!
Consigue tu dominio .es un año gratis.

Introduce el dominio que deseas en la barra de búsqueda para comprobar su disponibilidad.
12 meses desde 0€/año IVA incl.
después 12,10 €/año IVA incl.