RabbitMQ permite la transmisión de mensajes entre diferentes aplicaciones usando exchanges, que son intermediarios para enrutar mensajes hacia las colas basándose en ciertas reglas. Existen varios tipos de exchanges en RabbitMQ, cada uno con un comportamiento específico y se utilizan dependiendo del caso de uso.
En un Direct Exchange, los mensajes se enrutan a las colas basándose en una coincidencia exacta de la clave de enrutamiento (routing key). Solo las colas vinculadas a una clave de enrutamiento específica recibirán los mensajes que coincidan exactamente con esa clave.
Si una cola está vinculada con la clave error_logs
, solo recibirá los mensajes cuya clave de enrutamiento sea error_logs
.
El Fanout Exchange ignora las claves de enrutamiento y copia el mensaje a todas las colas vinculadas. Este tipo de exchange se utiliza para difundir un mensaje a varias colas, independientemente de la clave de enrutamiento.
Un Fanout Exchange enviará un mensaje a todas las colas vinculadas, sin importar la clave de enrutamiento.
El Topic Exchange enruta mensajes basándose en patrones de la clave de enrutamiento. Utiliza comodines como *
(una palabra) y #
(cero o más palabras) para hacer coincidir patrones complejos.
Una cola vinculada con el patrón logs.*
recibirá todos los mensajes que tengan una clave de enrutamiento que comience con logs.
y siga con una palabra (logs.error
, logs.info
).
El Headers Exchange enruta mensajes basándose en los valores de los encabezados del mensaje, en lugar de la clave de enrutamiento. Se pueden definir reglas de coincidencia para los encabezados del mensaje, como x-match = all
o x-match = any
.
Si un mensaje tiene un encabezado type: error
y format: json
, será enviado a las colas que estén vinculadas a esos valores específicos de encabezados.
Tipo de Exchange | Descripción | Uso de Routing Key | Uso común |
---|---|---|---|
Direct Exchange | Coincide con la clave de enrutamiento exacta. | Obligatorio | Enrutamiento simple y preciso. |
Fanout Exchange | Envía el mensaje a todas las colas vinculadas. | No considerado | Broadcast de mensajes. |
Topic Exchange | Coincide con patrones de la clave de enrutamiento. | Obligatorio | Enrutamiento flexible con patrones. |
Headers Exchange | Coincide con valores en los encabezados del mensaje. | No utilizado | Enrutamiento basado en metadatos (headers). |
Cada tipo de exchange en RabbitMQ tiene su propósito y es adecuado para diferentes escenarios. Los Direct Exchanges son útiles para enrutamientos precisos, los Fanout Exchanges para difundir mensajes, los Topic Exchanges ofrecen flexibilidad con patrones de enrutamiento, y los Headers Exchanges permiten el enrutamiento basado en metadatos.
Jorge García
Fullstack developer