Configurações e conceitos | RabbitMQ
- Configurações e conceitos | RabbitMQ
Configurações
- As configurações da fila como
autoDelete,exclusive,durableprecisam ser iguais tanto do lado doconsumerquanto dopublisher - 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:
directfanouttopicheaders
Queue
-
Estrutura onde as mensagens ficam armazenadas
-
Entrega mensagens aos consumidores
-
Pode ser:
- durável (
durable) - exclusiva (
exclusive) - auto deletável (
autoDelete)
- durável (
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
No .NET, o termo channel foi trocado por model
Diferenças principais
| Conexão | Canal |
|---|---|
| Pesada | Leve |
| TCP/IP | Virtual |
| Poucas | Muitas |
| Comunicação base | Operaçõ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