Skip to main content

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

Image

Image

  1. O produtor publica:
exchange = pedido.criado
routingKey = pedido.email
  1. 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

routingKeybindingKeyEntrega
emailemail
emailsms

🧠 Uso: roteamento simples, comando direto.


2️⃣ Topic Exchange (mais usada)

📌 Usa wildcards

SímboloSignificado
*1 palavra
#0 ou mais palavras

Exemplo

routingKeybindingKeyEntrega
pedido.emailpedido.*
pedido.emailpedido.#
pedido.emailpagamento.*

🧠 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