Routing Key | RabbitMQ
- Routing Key | RabbitMQ
🧠 O que é a routingKey?
A routingKey é uma string de roteamento que a exchange usa para decidir 👉 quais filas receberão a mensagem.
📌 O produtor publica na exchange 📌 A exchange usa a routingKey para rotear 📌 As filas recebem a mensagem se o binding combinar
🔀 Como funciona na prática
- O produtor publica:
exchange = pedido.criado
routingKey = pedido.email
- A fila foi criada com um binding:
bindingKey = pedido.email
➡️ Match = mensagem entregue à fila
🎯 RoutingKey ≠ BindingKey
- routingKey → enviada pelo produtor
- bindingKey → configurada pelo consumidor ao criar o binding
A exchange compara as duas.
🧩 O papel da routingKey em cada tipo de exchange
1️⃣ Direct Exchange
📌 Match exato
| routingKey | bindingKey | Entrega |
|---|---|---|
email | email | ✅ |
email | sms | ❌ |
🧠 Uso: roteamento simples, comando direto.
2️⃣ Topic Exchange (mais usada)
📌 Usa wildcards
| Símbolo | Significado |
|---|---|
* | 1 palavra |
# | 0 ou mais palavras |
Exemplo
| routingKey | bindingKey | Entrega |
|---|---|---|
pedido.email | pedido.* | ✅ |
pedido.email | pedido.# | ✅ |
pedido.email | pagamento.* | ❌ |
🧠 Uso: eventos, microserviços, fan-out seletivo.
3️⃣ Fanout Exchange
🚫 routingKey é ignorada
BasicPublish(exchange, "", body)
➡️ Todas as filas recebem.
🧠 Uso: broadcast total.
4️⃣ Headers Exchange
🚫 routingKey ignorada ✔️ headers da mensagem decidem o roteamento.
🧠 Analogia simples
🏤 Exchange = Correios 🏷️ routingKey = CEP 📬 Fila = Caixa de correio
O CEP não entrega sozinho — ele orienta a entrega.
📌 Por que o produtor PRECISA definir routingKey?
Sem routingKey:
- A exchange não sabe para quem enviar
- A mensagem pode ser descartada (se não houver match)
👉 A routingKey é o contrato de roteamento entre produtor e consumidores.
🎯 Boas práticas
✅ Use nomes semânticos
pedido.criado
pedido.cancelado
pedido.email.enviar
✅ Estruture por domínio
<dominio>.<acao>.<detalhe>
❌ Evite:
key1
teste
123
🧪 Exemplo completo (C#)
channel.BasicPublish(
exchange: "pedido.criado",
routingKey: "pedido.email",
basicProperties: null,
body: body
);
➡️ Só receberá quem tiver um binding compatível.
Resumo rápido
- routingKey define o caminho da mensagem
- Quem define → produtor
- Quem decide → exchange
- Quem recebe → fila com binding compatível
- Em
fanout→ ignorada - Em
topic→ poderosa e flexível