En el área de TI, los di­fe­re­n­tes sistemas están co­n­s­ta­n­te­me­n­te enviando o re­ci­bie­n­do mensajes. Esto debe llevarse a cabo de forma co­n­tro­la­da 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 apli­ca­cio­nes puedan co­mu­ni­car­se entre sí de manera sencilla, tiene sentido crear un in­te­r­me­dia­rio, es decir, un servicio que se encargue de gestionar la di­s­tri­bu­ción de los mensajes: esto es lo que se conoce como bróker de me­n­sa­je­ría. Te pre­se­n­ta­mos Rabbitmq, uno de los más conocidos.

Dominios web
Compra y registra tu dominio ideal
  • Gratis SSL Wildcard para tra­n­s­fe­re­n­cias de datos más seguras
  • Gratis registro privado para más pri­va­ci­dad

¿Qué es Rabbitmq?

Rabbitmq está basado en la idea del protocolo AMQP (Advanced Message Queuing Protocol), cuya gran ventaja es que emisores y de­s­ti­na­ta­rios no tienen por qué entender el mismo lenguaje de pro­gra­ma­ción. En­tre­ta­n­to, este bróker de me­n­sa­je­ría se ha ido separando de AMQP y, gracias a los plugins, soporta también otros pro­to­co­los de me­n­sa­je­ría como STOMP y MQTT. No obstante, la idea sigue siendo la misma: la exi­s­te­n­cia de una cola entre el emisor y el receptor del mensaje. Los mensajes colocados en la cola se almacenan te­m­po­ra­l­me­n­te.

Hecho

En este contexto, el término “mensaje” se utiliza con un sentido muy amplio. Los mensajes pueden ser in­s­tru­c­cio­nes a programas externos o mensajes de texto reales. Es decir, cualquier forma de tra­n­s­fe­re­n­cia de in­fo­r­ma­ción puede llevarse a cabo mediante Rabbitmq u otros brókers de me­n­sa­je­rí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 me­n­sa­je­rí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 co­mu­ni­ca­ción asíncrona: los emisores y los de­s­ti­na­ta­rios no tienen por qué ir al mismo ritmo.

Im­ple­me­n­ta­ción con Rabbitmq

En la tra­n­s­mi­sión de los mensajes pa­r­ti­ci­pan cuatro es­ta­cio­nes:

  • Productor: crea los mensajes
  • In­te­r­ca­m­bia­dor: entrega los mensajes
  • Cola: almacena los mensajes
  • Co­n­su­mi­dor: procesa el mensaje

El productor publica un mensaje, pero no lo envía di­re­c­ta­me­n­te al co­n­su­mi­dor, sino que lo entrega al in­te­r­ca­m­bia­dor. En esta estación se di­s­tri­bu­yen los mensajes por las di­fe­re­n­tes colas, que sirven de punto de lectura de un mensaje para un co­n­su­mi­dor. Tanto el in­te­r­ca­m­bia­dor como las colas forman parte de Rabbitmq y son ad­mi­ni­s­tra­dos por el software. Para que los mensajes lleguen al de­s­ti­na­ta­rio correcto, se utilizan claves de en­ru­ta­mie­n­to, esto es, un atributo que el emisor añade a la cabecera del mensaje y funciona como una dirección. Gracias a ella, el in­te­r­ca­m­bia­dor sabe adónde enrutar el mensaje.

Entre la cola y el in­te­r­ca­m­bia­dor, se debe es­ta­ble­cer una vi­n­cu­la­ción, es decir, un enlace que se configura para vincular una cola a un in­te­r­ca­m­bia­dor y que sirve también para definir los pa­rá­me­tros conforme a los cuales un mensaje debe enviarse. Existen cuatro tipos básicos de mensajes que pueden di­s­tri­bui­r­se.

In­te­r­ca­m­bia­dor directo

Un in­te­r­ca­m­bia­dor directo se produce cuando hay una conexión directa entre un emisor y un de­s­ti­na­ta­rio. El productor envía el mensaje a la cola cuya clave de vi­n­cu­la­ción sea idéntica a la clave de en­ru­ta­mie­n­to del mensaje. Es decir, solo una cola coincide exac­ta­me­n­te con la clave de en­ru­ta­mie­n­to del mensaje que, a su vez, suele ser utilizada por un solo co­n­su­mi­dor.

In­te­r­ca­m­bia­dor de un tema

Este tipo de in­te­r­ca­m­bio amplía el concepto del in­te­r­ca­m­bia­dor directo. En vez de basarse en un solo parámetro (clave de en­ru­ta­mie­n­to = clave de vi­n­cu­la­ción), los mensajes pueden dirigirse a varias colas. Para ello, se recurre a los comodines. En co­n­se­cue­n­cia, algunas colas o claves de vi­n­cu­la­ción son aceptadas, pero otras son de­s­ca­r­ta­das.

In­te­r­ca­m­bia­dor de abanico

El in­te­r­ca­m­bia­dor de abanico funciona como una tra­n­s­mi­sión. Los mensajes se di­s­tri­bu­yen a todas las colas enlazadas, y no se realiza ninguna cla­si­fi­ca­ción. Las claves de en­ru­ta­mie­n­to pro­po­r­cio­na­das se ignoran si­m­ple­me­n­te.

In­te­r­ca­m­bia­dor de en­ca­be­za­mie­n­tos

En el caso de un in­te­r­ca­m­bia­dor de en­ca­be­za­mie­n­to, las claves de en­ru­ta­mie­n­to pro­po­r­cio­na­das también son ignoradas. En cambio, la cabecera del mensaje desempeña un papel im­po­r­ta­n­te. Dentro de la cabecera, el in­te­r­ca­m­bia­dor encuentra los atributos ne­ce­sa­rios para decidir cuáles son las colas correctas. En este sentido, podemos decir que un in­te­r­ca­m­bia­dor de en­ca­be­za­mie­n­tos y un in­te­r­ca­m­bia­dor 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 co­n­su­mi­dor, es decir, el programa que escucha, se conecta a de­te­r­mi­na­das colas y desde ellas procesa los mensajes. Esto explica que a cada cola solo se le asigne un co­n­su­mi­dor. Si se ex­tra­je­ran varios mensajes de una cola, no se podría ga­ra­n­ti­zar una di­s­tri­bu­ción correcta de los mismos. Op­cio­na­l­me­n­te, puedes es­ta­ble­cer mensaje a mensaje si el de­s­ti­na­ta­rio 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 pro­gra­ma­ción Erlang. Desde su página oficial se puede descargar para Linux, BSD, Unix, Windows y macOS. Asimismo, se re­co­mie­n­da utilizar plugins para facilitar el trabajo con este bróker de me­n­sa­je­ría y ampliar sus fu­n­cio­na­li­da­des. El primero y el más importe es el ma­na­ge­me­nt plugin, que está incluido en la in­s­ta­la­ción estándar, aunque es necesario activarlo. Gracias a este plugin, los usuarios pueden ad­mi­ni­s­trar Rabbitmq desde una interfaz gráfica de usuario (GUI), controlar los mensajes de las colas y vi­sua­li­zar es­ta­dí­s­ti­cas.

Otro plugin im­po­r­ta­n­te es Shovel, que permite conectar dos brókers de me­n­sa­je­ría entre sí, lo que resulta muy útil para, por ejemplo, di­s­tri­buir mejor la carga. También sirve para trasladar grandes ca­n­ti­da­des de datos o datos co­n­fi­de­n­cia­les, por ejemplo, por razones de seguridad, a una red to­ta­l­me­n­te diferente.

La co­mu­ni­ca­ción se produce mediante TCP, lo que explica que se utilicen puertos en Rabbitmq. Es necesario que los puertos no estén cerrados ni blo­quea­dos por otras apli­ca­cio­nes. La do­cu­me­n­ta­ción de Rabbitmq incluye una lista en la que se detallan todos los puertos uti­li­za­dos.

Hecho

La ca­ra­c­te­rí­s­ti­ca más de­s­ta­ca­ble de Rabbitmq es su ar­qui­te­c­tu­ra ligera. Este bróker de me­n­sa­je­ría es rápido y resulta muy útil en muchas si­tua­cio­nes. No obstante, para proyectos de gran en­ve­r­ga­du­ra, los de­sa­rro­lla­do­res y los ad­mi­ni­s­tra­do­res se decantan por Apache Kafka.

Ir al menú principal