Veremos hoy cómo acelerar el tiempo de carga de tus páginas ejecutando el procesamiento más pesado de forma asíncrona, todo gestionado de forma muy sencilla, gracias a RabbitMQ.

La estabilidad y la velocidad de una aplicación o sitio web se encuentran sin duda entre los factores más importantes para los usuarios. ¿Quién nunca ha abandonado un sitio antes de ver la primera página porque tomó demasiado tiempo?

¿Qué es RabbitMQ?

RabbitMQ es un agente de mensajería de código abierto, distribuido y escalable que sirve como intermediario para una comunicación eficiente entre productores y consumidores.

RabbitMQ implementa el protocolo de mensajería de capa de aplicación AMQP, el cual está enfocado a comunicar mensajes asíncronos con garantía de entrega a través de confirmaciones de recepción de mensajes del broker al productor y de los consumidores al productor.

¿Cómo funciona RabbitHQ?

De manera simplificada, RabbitMQ define colas que almacenarán los mensajes enviados por los productores hasta que las aplicaciones consumidoras obtengan el mensaje y lo procesen. Nos permite diseñar e implementar sistemas distribuidos, en los que un sistema se divide en módulos independientes que se comunican entre sí a través de mensajes.

Como toda comunicación, necesitamos un productor, un mensaje y un receptor. En medio del pastel se encuentra RabbitMQ, que sería el lugar donde el mensaje espera al receptor.

Comprendamos mejor cómo funciona conociendo los tipos de intercambios que representan el intercambio de mensajes.

Tipos de intercambio

A través de los intercambios, cada vez que enviamos un mensaje a través de RabbitMQ, no lo enviamos directamente a una cola; para que otros sistemas lo lean, lo enviamos a un exchange, que se encarga de reenviar los mensajes a diferentes colas.

Crédito de la imagen: CloudAQMP

Los tipos de intercambios son Directo, Fanout, Tema y Lectores.

Intercambio Directo

Supongamos que un productor necesita enviar un mensaje de confirmación de compra a tres consumidores. Es decir, el sistema necesita comunicarse con otros tres sistemas diferentes para realizar la compra.

Como RabbitMQ envía el mensaje por separado a cada cola, existe un impulso para hacer que estos otros sistemas reciban el mensaje directamente.

Normalmente, el intercambio reenvía el mensaje a las colas, pero a menudo no queremos que nuestros mensajes se envíen a todas las colas. Por lo tanto, existen varias condiciones que podemos aplicar para que un intercambio funcione.

Para que pueda enviar su mensaje a un solo consumidor; en lugar de ser enviado a todos.

Clave de enlace: para conectar una cola a un intercambio, debe crear un enlace, una relación entre una cola y un intercambio, como un conector.

Clave de enrutamiento: en este enlace, también podemos crear un elemento llamado clave de enrutamiento, que en otras palabras, es una clave para reenviar nuestros mensajes a una cola específica.

Si tiene una clave de enrutamiento X, una clave de enrutamiento Y y una clave de enrutamiento Z, el mensaje con la clave de enrutamiento Y, por ejemplo, pasará por la cola Y y se entregará directamente al consumidor que definió para recibir el mensaje.

De esta forma, podemos tener varias colas conectadas a un intercambio, pero al mismo tiempo, también pueden tener diferentes relaciones con los intercambios usando las claves de enrutamiento.

Intercambio de distribución

Cuando el mensaje se envía al intercambio, se envía a todas las colas conectadas a él. Entonces, si tiene 10 colas conectadas a un intercambio fanout, todas las colas recibirán el mensaje que se envió.

Intercambio de temas

Es uno de los intercambios más flexibles, permitiéndonos enviar mensajes según el tema. Y según la forma en que nombra las claves de enrutamiento, es posible crear patrones de reglas y relaciones entre sistemas.

Por ejemplo: clave de enrutamiento (x.*); clave de enrutamiento (*.z); clave de enrutamiento (*.y.*).

¿Qué es AQMP en RabbitMQ?

AMQP (Advanced Message Queuing Protocol) es un protocolo de mensajería abierto que se utiliza para definir el transporte de mensajes entre varias aplicaciones. Es similar a los protocolos HTTP y TCP en que es un protocolo de nivel de cable, excepto que permite el transporte asíncrono.

RabbitMQ eligió implementar AMQP por varias razones. La primera es que este protocolo se describe como un estándar para middleware, a diferencia de JMS, que define una API.

Un consorcio internacional, que incluye grandes empresas como Red Hat, Cisco Systems y Microsoft, redactó esta Especificación AMQP. El segundo es la interoperabilidad de este protocolo, que permite que cualquier aplicación que implemente AMQP se comunique con un bróker de AMQP.

AMQP no es el único protocolo utilizado por RabbitMQ. La siguiente imagen representa todos los protocolos, idiomas y API implementados y/o admitidos por RabbitMQ.

Las mejores características de RabbitMQ

Además de permitir la integración de diferentes aplicaciones a través de mensajes de forma asíncrona y desde diferentes ubicaciones, RabbitMQ nos ofrece otras funcionalidades que lo han hecho muy popular dentro del mundo de los brokers de mensajería:

Almacenamiento confiable

RabbitMQ incorpora varias funciones que le permiten garantizar la entrega de mensajes. Entre estos, proporciona almacenamiento cuando ningún consumidor puede recibir el mensaje. Permite a los consumidores aceptar la entrega del mensaje para asegurarse de que ha sido procesado con éxito.

Si el procesamiento falla, RabbitMQ permite que el mensaje se vuelva a poner en cola para que lo consuma una instancia diferente del consumidor o que el mismo consumidor que falló inicialmente lo procese nuevamente cuando se recupere.

RabbitMQ también garantiza el orden de entrega de los mensajes; es decir, se consumen en el mismo orden en que llegaron a las colas de RabbitMQ.

Creación de clústeres

Aunque RabbitMQ proporciona un gran rendimiento al procesar miles de mensajes por segundo, a veces necesita poder procesar una mayor cantidad de mensajes sin afectar el rendimiento de la aplicación.

Para ello, RabbitMQ permite la creación de clústeres para escalar la solución de manera horizontal, lo cual es transparente tanto para productores como para consumidores.

Colas altamente disponibles

En RabbitMQ, las colas se pueden replicar en varios nodos de un clúster, lo que garantiza que, en caso de falla o tiempo de inactividad de un nodo, el intermediario pueda continuar recibiendo mensajes de los productores y entregándolos a los consumidores apropiados.

Enrutamiento flexible

En RabbitMQ, se pueden definir reglas de enrutamiento flexibles, incluso siguiendo un patrón determinado, para enrutar mensajes entre intercambios y colas, a través de enlaces.

Soporte de múltiples protocolos

Además de admitir el protocolo AMQP, RabbitMQ admite STOMP, MQTT y HTTP a través de complementos. También incorpora mecanismos de autenticación y control de acceso a los componentes de cada broker.

Casos de uso de la vida real de RabbitMQ

Los casos de uso más importantes de RabbitMQ son posibilitar la garantía de asincronía entre aplicaciones, reducir el acoplamiento entre aplicaciones, distribuir alertas y controlar la cola de trabajos en segundo plano.

Sin embargo, los casos prácticos de uso de RabbitMQ se encuentran en el comercio electrónico, donde t se utiliza para manipular, procesar y reenviar sus pedidos de venta a sistemas de otros sectores, como distribución y emisión de facturas.

Al procesar pedidos, puede reenviar su mensaje de ventas al centro de distribución y al área de facturación. En este esquema, todo funciona de forma horizontal, siguiendo el patrón asíncrono de envío de mensajes, pero muchas veces es posible enviar una acción a varias colas.

Siguiendo con el ejemplo anterior, esta función puede ser muy útil cuando el cliente realiza una compra y necesita preparar el producto para su distribución, transporte y facturación.

Y dado que cada uno de estos sectores es un sistema diferente, el objetivo de RabbitMQ es reenviar todos estos mensajes a los sistemas correspondientes.

Conejo MQ alternativas:

RabbitMQ es mucho más simple de lo que parece, y existen varias alternativas que incluyen:

#1. HierroMQ

IronMQ es un software de cola de mensajes súper rápido. Es altamente disponible, de diseño duradero y preferiblemente para una entrega única. IronMQ es la solución nativa de la nube más poderosa para la arquitectura de aplicaciones modernas.

Admite colas de inserción, colas de extracción y encuestas largas, lo que mantiene abiertas las solicitudes de encuesta por más tiempo. Además, puede utilizar múltiples centros de datos de alta disponibilidad, lo que facilita la escalabilidad.

Puede implementar en la nube, en hardware compartido o dedicado, o en las instalaciones. También tiene una variedad de bibliotecas de clientes con documentación fácil de leer.

#2. apache kafka

Kafka es una plataforma con una fuerte presencia en el streaming de eventos distribuidos. En esencia, Kafka está diseñado como un registro de confirmación persistente, distribuido y replicado.

Su mayor facilidad de uso es para potenciar microservicios impulsados ​​por eventos o aplicaciones de procesamiento de flujo a gran escala, replicando automáticamente eventos de forma asíncrona dentro del clúster para tolerancia a fallas y alta disponibilidad.

#3. Apache Active MQ

ActiveMQ es un intermediario de mensajes multiprotocolo basado en Java. Con él, podemos integrar aplicaciones utilizando el protocolo de colas de mensajes AMQP en la capa de aplicación.

Implementa varios protocolos para la integración, como JMS (Java nativo) y Stomp (que puede ser utilizado por aplicaciones PHP), entre otros.

Además, Amazon tiene su versión “administrada” llamada Amazon MQ, que facilita mucho el uso del servicio.

Ultimas palabras

Los corredores de mensajería han sido tradicionalmente una pieza importante dentro de las arquitecturas de las organizaciones. Aún así, con el aumento de usuarios que ingresan a los sistemas de la empresa a través de diferentes canales, se necesitan productos que permitan escalarlos horizontalmente a un bajo costo. Permitiendo el procesamiento de una gran cantidad de mensajes por segundo.

Aquí es donde una nueva generación de brokers, como RabbitMQ, cobra mayor relevancia en las aplicaciones modernas, que buscan ofrecer altos niveles de disponibilidad, confiabilidad, interoperabilidad y rendimiento a nuestros clientes.

También puede explorar algunas plataformas de alojamiento RabbitMQ confiables para su aplicación.