> For the complete documentation index, see [llms.txt](https://sorodriguezz.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sorodriguezz.gitbook.io/docs/system-design/comunicacion-asincronica/message-queues.md).

# Message Queues

Una cola de mensajes es un mecanismo de comunicación que permite que diferentes partes de un sistema envíen y reciban mensajes **de forma asincrónica**.

Actúa como  **intermediario**  que almacena temporalmente los mensajes enviados por **los productores (o editores)** y los entrega a **los consumidores (o suscriptores)**.

La característica clave de una cola de mensajes es que permite que los componentes se comuniquen sin necesidad de estar al tanto de la existencia de los demás, lo que conduce a una **arquitectura desacoplada**.

<figure><img src="https://68723454-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4uI4DAiXiJQvvTbHUU3Z%2Fuploads%2FBXSBvsl0AcTWcDT3WDZE%2FCaptura%20de%20pantalla%202025-12-29%20a%20la(s)%2010.13.06.png?alt=media&amp;token=91a2370b-f55b-4f86-9d30-11144d1d2436" alt="" width="563"><figcaption></figcaption></figure>

## 1. Componentes principales de una cola de mensajes <a href="#id-1-core-components-of-a-message-queue" id="id-1-core-components-of-a-message-queue"></a>

**1. Productor/Editor**

La entidad que envía mensajes a la cola. Los productores envían mensajes a la cola sin preocuparse por el estado del consumidor.

**2. Consumidor/Suscriptor**

La entidad que lee los mensajes de la cola. Los consumidores extraen los mensajes de la cola y los procesan.

**3. Cola**

La estructura de datos que almacena los mensajes hasta que se consumen.

**4. Broker/Gestor de colas**

El software o servicio que administra la cola de mensajes, maneja la entrega de mensajes y garantiza que los mensajes se enruten correctamente entre productores y consumidores.

**5. Mensaje**

La unidad de datos enviada a través de la cola. Un mensaje generalmente contiene la  **carga útil**  (los datos que se envían) y  **metadatos**  (como encabezados, marcas de tiempo y prioridad).

## 2. ¿Cómo funcionan las colas de mensajes? <a href="#id-2-how-do-message-queues-work" id="id-2-how-do-message-queues-work"></a>

<figure><img src="https://68723454-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4uI4DAiXiJQvvTbHUU3Z%2Fuploads%2FcliFzzUPzeNKmhuLhS0J%2FCaptura%20de%20pantalla%202025-12-29%20a%20la(s)%2010.13.44.png?alt=media&amp;token=3ac33e21-af61-49b3-ba77-ba9975e98548" alt="" width="563"><figcaption></figcaption></figure>

El flujo de trabajo básico de una cola de mensajes se puede dividir en los siguientes pasos:

1. **Creación de mensajes** : un productor genera un mensaje que contiene los datos y metadatos necesarios.
2. **Poner en cola el mensaje** : el productor envía el mensaje a la cola, donde se almacena hasta que un consumidor lo recupera.
3. **Almacenamiento de mensajes** : la cola almacena el mensaje de manera persistente o transitoria según su configuración.
4. **Desconexión de mensajes** : Un consumidor recupera el mensaje de la cola para su procesamiento. Según la configuración de la cola, los mensajes pueden consumirse en orden, según la prioridad o incluso en paralelo.
5. **Acuse de recibo** : una vez que el consumidor procesa el mensaje, puede enviar un acuse de recibo al intermediario, confirmando que el mensaje se ha manejado exitosamente.
6. **Eliminación de mensajes** : después del reconocimiento, el agente elimina el mensaje de la cola para evitar que se procese nuevamente.

## 3. Tipos de colas de mensajes <a href="#id-3-types-of-message-queues" id="id-3-types-of-message-queues"></a>

Hay varios tipos de colas de mensajes, cada uno diseñado para resolver problemas específicos:

**1. Cola punto a punto (P2P)**

En este modelo, los mensajes se envían de un productor a un consumidor.

> Se utiliza cuando un mensaje necesita ser procesado por un  **solo consumidor** , como en los sistemas de procesamiento de tareas.

**2. Cola de publicación/suscripción (Pub/Sub)**

<figure><img src="https://68723454-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4uI4DAiXiJQvvTbHUU3Z%2Fuploads%2Fz12OMDT1beCrMTmhMdqe%2FCaptura%20de%20pantalla%202025-12-29%20a%20la(s)%2010.14.07.png?alt=media&amp;token=11e3b5a1-8699-436e-a6de-d8b0b85dfe6d" alt="" width="563"><figcaption></figcaption></figure>

En este modelo, los mensajes se publican en un  **tema** y varios consumidores pueden suscribirse a ese tema para recibir mensajes.

> Se utiliza para transmitir mensajes a  **múltiples consumidores** , como en sistemas de notificación.

**3. Cola de prioridad**

A los mensajes en la cola se les asignan  **prioridades** , y los mensajes de mayor prioridad se procesan antes que los de menor prioridad.

> Se utiliza cuando ciertas tareas deben manejarse con más urgencia que otras.

**4. Cola de mensajes no entregados (DLQ)**

<figure><img src="https://68723454-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4uI4DAiXiJQvvTbHUU3Z%2Fuploads%2FIhnrttAmklCu43CDIwe8%2FCaptura%20de%20pantalla%202025-12-29%20a%20la(s)%2010.14.35.png?alt=media&amp;token=32486f53-847d-47a5-8270-9d16514dadb0" alt="" width="563"><figcaption></figcaption></figure>

Un tipo especial de cola donde se envían mensajes que no se pueden procesar (debido a errores o reintentos).

> Útil para solucionar problemas y gestionar mensajes fallidos.

## 4. Ventajas de usar colas de mensajes <a href="#id-4-advantages-of-using-message-queues" id="id-4-advantages-of-using-message-queues"></a>

Las colas de mensajes ofrecen varios beneficios, entre ellos:

* **Desacoplamiento** : Las colas de mensajes desacoplan a productores y consumidores, permitiéndoles operar de forma independiente. Esto posibilita arquitecturas más flexibles y escalables.
* **Procesamiento asíncrono** : Los productores pueden enviar mensajes a la cola y continuar con otras tareas sin esperar a que los consumidores los procesen. Esto mejora el rendimiento general del sistema.
* **Equilibrio de carga** : varios consumidores pueden extraer mensajes de la cola, lo que permite que el trabajo se distribuya y equilibre entre diferentes consumidores.
* **Tolerancia a fallos** : Las colas de mensajes persistentes garantizan que los mensajes no se pierdan incluso si un consumidor o productor falla. También permiten  **reintentos**  y  **gestión de errores** .
* **Escalabilidad** : las colas de mensajes pueden manejar un gran volumen de mensajes, lo que permite que los sistemas escalen horizontalmente agregando más consumidores.
* **Limitación** : las colas de mensajes pueden ayudar a controlar la velocidad de procesamiento de los mensajes, evitando que los consumidores se sientan abrumados.

## 5. Cuándo utilizar colas de mensajes <a href="#id-5-when-to-use-message-queues" id="id-5-when-to-use-message-queues"></a>

Las colas de mensajes no siempre son la mejor solución, pero son muy útiles en determinadas situaciones:

**1. Arquitectura de microservicios**

* **Problema** : Los microservicios necesitan comunicarse entre sí, pero la comunicación directa puede generar un acoplamiento estrecho y fallas en cascada.
* **Solución** : utilice colas de mensajes para permitir la comunicación asincrónica entre microservicios, permitiendo que cada servicio funcione de forma independiente y resiliente.

**2. Programación de tareas y procesamiento en segundo plano**

* **Problema** : Ciertas tareas, como el procesamiento de imágenes o el envío de correos electrónicos, consumen mucho tiempo y no deberían bloquear el flujo principal de la aplicación.
* **Solución** : descargue estas tareas a una cola de mensajes y haga que los trabajadores en segundo plano (consumidores) las procesen de forma asincrónica.

**3. Arquitecturas basadas en eventos**

* **Problema** : Los eventos deben propagarse a múltiples servicios o componentes, pero la comunicación directa sería ineficiente.
* **Solución** : utilice una cola de mensajes Pub/Sub para transmitir eventos a todos los consumidores interesados, garantizando así que todas las partes del sistema reciban las actualizaciones necesarias.

**4. Nivelación de carga**

* **Problema** : Los picos repentinos de solicitudes pueden saturar un sistema, lo que genera un rendimiento degradado o fallas.
* **Solución** : poner en cola las solicitudes entrantes mediante una cola de mensajes y procesarlas a un ritmo constante, garantizando que el sistema permanezca estable bajo carga.

**5. Comunicación confiable**

* **Problema** : La comunicación entre componentes debe ser confiable, incluso ante fallas en la red o en el servicio.
* **Solución** : utilice colas de mensajes persistentes para garantizar que los mensajes no se pierdan y se puedan volver a intentar si falla la entrega.

## 6. Mejores prácticas para implementar colas de mensajes <a href="#id-6-best-practices-for-implementing-message-queues" id="id-6-best-practices-for-implementing-message-queues"></a>

* **Idempotencia** : asegúrese de que sus consumidores puedan manejar mensajes duplicados sin problemas, ya que las colas de mensajes pueden entregar el mismo mensaje más de una vez.
* **Durabilidad del mensaje** : Elija entre mensajes persistentes y transitorios según la criticidad de los datos. Los mensajes persistentes garantizan la fiabilidad, pero pueden comprometer el rendimiento.
* **Manejo de errores** : implemente un manejo de errores sólido, que incluya reintentos, colas de mensajes fallidos y mecanismos de alerta para lidiar con el procesamiento de mensajes fallidos.
* **Seguridad** : proteja sus colas de mensajes implementando cifrado, autenticación y control de acceso para proteger los datos en tránsito y en reposo.
* **Monitoreo y métricas** : configure el monitoreo y las métricas para rastrear el rendimiento y el estado de sus colas de mensajes, incluido el rendimiento de los mensajes, la longitud de la cola y el retraso del consumidor.
* **Escalabilidad** : planifique la escalabilidad eligiendo una solución de cola de mensajes que pueda crecer con su sistema, ya sea agregando más consumidores, particionando colas o utilizando un sistema de mensajería distribuida.

## 7. Sistemas de colas de mensajes populares <a href="#id-7-popular-message-queue-systems" id="id-7-popular-message-queue-systems"></a>

Existen varios sistemas de colas de mensajes que se utilizan ampliamente en la industria, cada uno con sus propias fortalezas y casos de uso:

1. **RabbitMQ** : Un agente de mensajes de código abierto ampliamente utilizado, compatible con múltiples protocolos de mensajería, incluido  [AMQP](https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol) . Es conocido por su fiabilidad y amplias funciones.
2. **Apache Kafka** : Una plataforma de streaming distribuido que destaca por su capacidad para gestionar grandes volúmenes de datos. Kafka se utiliza frecuentemente para el procesamiento de datos en tiempo real y la transmisión de eventos.
3. **Amazon SQS** : Un servicio de cola de mensajes totalmente administrado, proporcionado por AWS. SQS es altamente escalable y se integra perfectamente con otros servicios de AWS.
4. **Google Cloud Pub/Sub** : un servicio de cola de mensajes totalmente administrado ofrecido por Google Cloud, diseñado para análisis en tiempo real y aplicaciones basadas en eventos.
5. **Redis Streams** : una característica de Redis que proporciona una cola de mensajes simple en memoria con alto rendimiento, adecuada para tareas livianas.
6. **ActiveMQ** : un agente de mensajes de código abierto que admite varios protocolos de mensajería y se utiliza en entornos empresariales para una mensajería confiable.

## 8. Conclusión <a href="#id-8-conclusion" id="id-8-conclusion"></a>

Para concluir, las colas de mensajes son una herramienta poderosa para permitir la comunicación asincrónica, desacoplar componentes y mejorar la escalabilidad y la resiliencia de los sistemas de software modernos.

Como ocurre con cualquier decisión arquitectónica, es importante tener en cuenta su caso de uso y sus requisitos específicos al momento de decidir implementar colas de mensajes en su sistema.
