Skip to main content

Configurações e conceitos | RabbitMQ

  • Configurações e conceitos | RabbitMQ

Configurações

  • As configurações da fila como autoDelete, exclusive, durable precisam ser iguais tanto do lado do consumer quanto do publisher
  • Caso contrário, o RabbitMQ retorna erro de inequivalent arg, pois a fila já existe com outra definição

Conceitos (Entidades AMQP)

Todos os itens abaixo são Entidades AMQP


Message

  • Bloco de dados binários

  • Pode conter texto, JSON, XML, etc.

  • É composta por:

    • Payload (Body): conteúdo da mensagem
    • Properties / Headers (Label): metadados que descrevem o payload (content-type, headers, delivery-mode, etc.)

Exchange | central de distribuição das mensagens

  • Ponto de entrada das mensagens no RabbitMQ

  • Recebe mensagens do producer

  • Não armazena mensagens

  • Decide para quais filas a mensagem será enviada

  • O roteamento depende:

    • do tipo de exchange
    • da routing key
    • das bindings

Tipos comuns:

  • direct
  • fanout
  • topic
  • headers

Queue

  • Estrutura onde as mensagens ficam armazenadas

  • Entrega mensagens aos consumidores

  • Pode ser:

    • durável (durable)
    • exclusiva (exclusive)
    • auto deletável (autoDelete)

Binding

  • Relacionamento entre:

    • Exchange → Queue
  • Define as regras de roteamento

  • Pode conter uma binding key

  • É através do binding que o exchange sabe para qual fila enviar a mensagem


Conexão e Canal (Channel) | RabbitMQ

Conexão (Connection)

  • Link TCP/IP entre a aplicação e o RabbitMQ

  • É pesada em termos de recursos

  • Geralmente:

    • 1 conexão por aplicação
  • Mantém estado, autenticação e contexto de rede


Canal (Channel) | RabbitMQ | .NET (Model)

  • Sessão virtual dentro de uma conexão

  • Leve e eficiente

  • Multiplexado sobre uma única conexão TCP

  • Usado para:

    • publicar mensagens
    • consumir mensagens
    • declarar filas, exchanges e bindings

💡 Boa prática: Poucas conexões e muitos canais

info

No .NET, o termo channel foi trocado por model


Diferenças principais

ConexãoCanal
PesadaLeve
TCP/IPVirtual
PoucasMuitas
Comunicação baseOperações AMQP

🔁 Fluxo completo de mensagens no RabbitMQ

Fluxo lógico (alto nível)

Producer
|
| (publica mensagem)
v
Channel
|
v
Exchange
|
| (binding + routing key)
v
Queue
|
| (entrega)
v
Consumer

Fluxo detalhado (com entidades AMQP)

┌──────────┐
│ Producer │
└────┬─────┘

│ publish(message)

┌──────────┐
│ Channel │
└────┬─────┘


┌──────────┐
│ Exchange │
└────┬─────┘

│ Binding (routing key)

┌──────────┐
│ Queue │
└────┬─────┘

│ consume

┌──────────┐
│ Consumer │
└──────────┘

Leitura sequencial no RabbitMQ

As mensagens são armazenadas em ordem (FIFO) na fila, porém a ordem de consumo depende da configuração.


Casos possíveis

✔️ Um único consumidor

  • Mensagens são entregues na ordem de publicação
  • Comportamento sequencial garantido
Queue → Consumer

⚠️ Múltiplos consumidores

  • RabbitMQ distribui mensagens entre consumidores
  • Geralmente em round-robin
  • A ordem global pode parecer quebrada
           → Consumer A
Queue →
→ Consumer B

⚠️ Rejeição ou reentrega

  • Mensagens rejeitadas (nack, reject)
  • Podem voltar para a fila
  • A ordem percebida pode mudar

Como garantir ordem de leitura

Para garantir leitura sequencial:

  • ✔️ Use apenas um consumidor por fila
  • ✔️ Configure prefetch = 1
  • ✔️ Evite nack / requeue
  • ✔️ Mantenha o processamento rápido
  • ✔️ Evite paralelismo no consumer

Resumo final

  • Exchange decide para onde a mensagem vai
  • Queue armazena a mensagem
  • Binding conecta exchange e queue
  • Connection é o link TCP
  • Channel é onde tudo acontece
  • A ordem existe na fila, mas pode ser quebrada no consumo