trilha

Tecnologias/03 - Filas/02 - RabbitMQ2 min

Exchanges, Bindings e Roteamento no RabbitMQ

Definições

  • Exchange: recebe uma publicação e decide os destinos.
  • Binding: liga um destino ao exchange e pode definir um critério de roteamento.
  • Routing key: texto informado na publicação para participar dessa decisão.
  • Fila: conserva a mensagem para consumo conforme suas regras.
Exchange Regra
direct Correspondência exata da routing key com o binding
topic Correspondência por segmentos: * casa um segmento e # casa zero ou mais
fanout Encaminha para todos os destinos vinculados, sem usar a routing key
headers Decide com base nos cabeçalhos e critérios do binding

O exchange padrão tem nome vazio e associa cada fila ao seu próprio nome como chave. A aparência de publicar “diretamente na fila” usa esse exchange. Referência: exchanges.

Exemplo

Exchange: eventos, tipo topic

Fila faturamento: binding pedido.criado
Fila auditoria:   binding pedido.#
Fila email:       binding pedido.*

Publicar pedido.criado chega às três filas. Publicar pedido.pagamento.aprovado chega apenas à auditoria nesse exemplo: * não cobre os dois segmentos depois de pedido.

Um binding controla para quais filas uma publicação vai. A escolha de qual consumidor processará uma entrega dentro de cada fila é outra etapa.

Mensagem sem destino

Se nenhuma regra encontrar uma fila, a publicação pode ser descartada ou seguir um mecanismo alternativo configurado. No AMQP 0-9-1, mandatory permite receber de volta publicações sem destino. A aplicação precisa tratar esse retorno.

Um publisher confirm positivo não significa, por si só, que a mensagem encontrou a fila pretendida ou que um consumidor executou o trabalho. Referência: confiabilidade e roteamento.

Aprofundamento aplicado

Testar a topologia como parte do contrato

Um produtor pode publicar corretamente e o evento não chegar ao serviço pretendido porque o binding não corresponde. A verificação deve incluir a routing key real, o tipo do exchange e as filas vinculadas no ambiente.

Routing key Binding pedido.* Binding pedido.#
pedido Não Sim
pedido.criado Sim Sim
pedido.pagamento.aprovado Não Sim

No padrão topic, pontos separam palavras, * corresponde a uma e # a zero ou mais. Referência: exchanges.

Exercício: publique cada chave em uma topologia de estudo e confira as filas que recebem. Remova um binding e trate o retorno quando a publicação for irroteável. Resultado esperado: diferenciar ausência de rota de falha do consumidor.

Uma evolução de nomenclatura, como pedido.pago para pagamento.aprovado, exige migração dos contratos e bindings. Alterar só o produtor pode deixar consumidores funcionando sem receber novos eventos.

Relacionado: 1. RabbitMQ · 3. Confirmações, Retry e DLQ no RabbitMQ.


Parte de RabbitMQ

Buscar

Busca por título, seção e texto das notas