trilha

Tecnologias/03 - Filas/02 - RabbitMQ2 min

RabbitMQ

Definição

RabbitMQ é um broker de mensagens: recebe publicações e as encaminha para processamento por consumidores. No modelo AMQP 0-9-1, exchanges fazem o roteamento e filas mantêm as mensagens aguardando entrega ou confirmação.

Uma fila pode ter vários consumidores dividindo trabalho. Se dois serviços precisam receber cada evento de forma independente, normalmente cada serviço precisa de sua própria fila. Colocar ambos na mesma fila distribui as mensagens entre eles. Referência: filas.

Exemplo de fluxo

flowchart LR
  API[API de pedidos] --> E[Exchange pedidos]
  E --> F1[Fila faturamento]
  E --> F2[Fila notificacoes]
  F1 --> C1[Consumidor faturamento]
  F2 --> C2[Consumidor notificacoes]

Um evento pedido.criado pode ser roteado para ambas as filas. A indisponibilidade do serviço de notificações não impede o outro de continuar consumindo, enquanto o broker tiver capacidade para manter o acúmulo.

Durabilidade e replicação

Uma fila durável conserva sua definição após reinicialização. Persistência das mensagens e confirmação da publicação são decisões adicionais. Declarar apenas durable não comprova que toda publicação chegou ao armazenamento com segurança. Referência: confiabilidade.

Quorum queues usam replicação com Raft. A maioria dos membros precisa estar disponível para o grupo continuar operando. Isso envolve mais armazenamento e tráfego entre réplicas do que manter uma única cópia. Referência: quorum queues.

Limites

Fila crescendo continuamente indica que entradas e processamento estão desequilibrados. Mais consumidores ajudam apenas se o gargalo puder ser paralelizado. Concorrência e reentregas também afetam a ordem observada de processamento.

RabbitMQ possui ainda streams, com retenção e leitura de log. Portanto, comparar RabbitMQ e Kafka exige dizer qual mecanismo do RabbitMQ está sendo considerado.

Aprofundamento aplicado

Ready e unacknowledged contam histórias diferentes

Mensagens prontas aguardam entrega. Mensagens não confirmadas já foram entregues e aguardam ack. Poucas mensagens prontas com muitas não confirmadas podem indicar consumidores saturados ou prefetch alto, sem que a fila esteja efetivamente drenada.

Cenário: cada tarefa dura 2 s e um consumidor busca muitas antecipadamente. Ele pode concentrar trabalho enquanto outros ficam ociosos. Ajustar prefetch exige considerar paralelismo real, duração e uso de memória; não apenas taxa de entrega.

Backpressure atravessa a aplicação

Se a publicação fica mais lenta por pressão do broker, a API precisa decidir se espera, rejeita ou registra trabalho em armazenamento durável para envio posterior. Acumular promessas ou mensagens ilimitadamente na RAM apenas transfere o problema de lugar.

Exercício: limite a concorrência dos consumidores e acompanhe prontas, não confirmadas e tarefas concluídas. Resultado esperado: diferencie entregar rapidamente de processar rapidamente; aumentar o prefetch não aumenta a capacidade do banco de destino.

Referência: filas e estado das mensagens.

Relacionado: 2. Exchanges, Bindings e Roteamento no RabbitMQ · 3. Confirmações, Retry e DLQ no RabbitMQ · 5. Kafka vs Fila Tradicional.


Parte de RabbitMQ

Buscar

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