Pular para o conteúdo
O Complemento de Dois
  • Concursos
  • Calculadora
  • Estudos
  • Discord
  • Publicações
Home / Programação / RabbitMQ

RabbitMQ

A arquitetura do RabbitMQ é baseada no protocolo AMQP 0-9-1 (Advanced Message Queuing Protocol). Em vez de o produtor enviar uma mensagem diretamente para uma fila, o RabbitMQ usa uma abordagem intermediária que oferece muita flexibilidade.

Componentes Principais

  • Producer (Produtor): A aplicação que cria e envia as mensagens.
  • Exchange (Corretora/Roteador): É o cérebro do roteamento. O produtor envia a mensagem para a Exchange, e ela decide para qual fila (ou filas) a mensagem deve ir, baseando-se em regras chamadas Bindings.
  • Queue (Fila): Uma caixa de correio bufferizada. Ela armazena as mensagens com segurança até que os consumidores estejam prontos para recebê-las.
  • Consumer (Consumidor): A aplicação que fica escutando a fila, recebe as mensagens e as processa.

Elementos de Conexão e Roteamento

Para que esses componentes conversem entre si, o RabbitMQ utiliza alguns conceitos fundamentais:

Binding (Ligação)

É o “link” ou a regra para conectar uma Exchange a uma Fila.

Routing Key (Chave de Roteamento)

Atributo que o produtor adiciona à mensagem. A Exchange decide o destino da mensagens cruzando as regras de binding e da routing key.

Connection e Channel (Conexão e Canal)

  • Connection: É uma conexão TCP real e persistente entre a sua aplicação e o broker do RabbitMQ. Como abrir conexões TCP é algo “caro” para o sistema, o RabbitMQ introduz o conceito de canais.
  • Channel: São conexões virtuais dentro de uma única conexão TCP física. Toda a comunicação de envio e recebimento de mensagens acontece via canais, permitindo reaproveitar a mesma conexão TCP para várias tarefas simultâneas (multithreading).

Os Tipos de Exchange

A forma como a Exchange distribui as mensagens muda completamente a arquitetura do seu sistema. Existem 4 tipos principais:

Tipo de ExchangeComo funcionaCaso de Uso Comum
DirectRoteia a mensagem para a fila que tem o Binding Key exatamente igual à Routing Key da mensagem.Sistema de log onde erros vão para uma fila e avisos vão para outra.
FanoutIgnora a Routing Key e copia a mensagem para todas as filas conectadas a ela (Broadcast).Atualizações em tempo real (ex: notificar vários microsserviços sobre uma venda).
TopicFaz um roteamento parcial (Pattern Matching) usando pontos e curingas como * (substitui uma palavra) e # (substitui zero ou mais palavras).Sistemas de notificações complexos (ex: br.com.financeiro.sucesso).
HeadersIgnora a Routing Key e usa os atributos do cabeçalho da mensagem para decidir o destino.Roteamento baseado em metadados complexos que não cabem em uma string simples.

O Fluxo da Mensagem (Resumo)

  1. O Produtor publica uma mensagem na Exchange com uma Routing Key.
  2. A Exchange recebe, valida as regras de Binding e direciona para as Filas correspondentes.
  3. A Fila retém a mensagem.
  4. O Consumidor, conectado via Channel, puxa ou recebe a mensagem da fila para processá-la.

Persistência

Fila durável (durable queue)

Garante que a definição da fila sobreviva a um restart do RabbitMQ.

Se o broker cair e subir novamente:

  • A fila continua existindo.
  • Mas as mensagens podem ter sido perdidas, dependendo de como foram publicadas.

Mensagem persistente (persistent message)

Garante que a mensagem seja gravada em disco.

Se o broker cair e subir novamente:

  • A mensagem pode ser recuperada.
  • Mas isso só funciona se a fila também for durável.
Fila durávelMensagem persistenteResultado após restart
❌❌Fila e mensagens somem
✅❌Fila continua, mensagens somem
❌✅Fila some, mensagens somem junto
✅✅Fila e mensagens sobrevivem

Conceitos adicionais

Dead Letter Exchange (DLX) é um dos mecanismos mais importantes para resiliência e depuração no RabbitMQ. Ele é uma “fila do fim da fila” – um lugar para onde as mensagens vão quando não podem ser processadas normalmente.

Situações comuns:

SituaçãoDescriçãoExemplo
1. Mensagem rejeitadaConsumidor rejeita com requeue=falsechannel.basicReject(deliveryTag, false)
2. TTL expiradoMensagem expirou na fila (ninguém consumiu a tempo)Fila com x-message-ttl: 60000 (60s)
3. Fila cheiaTamanho máximo da fila foi atingidoFila com x-max-length: 1000
4. Mensagem expirada no headerA própria mensagem tem um prazo de validadeexpiration: 60000 nas propriedades

Poison Pill é uma mensagem que, por algum motivo, sempre falha ao ser processada.

DLQ (Dead Letter Queue) é a fila de destino, onde as mensagens problemáticas ficam armazenadas para análise posterior.

Fluxo:

  1. A mensagem está em orders.queue.
  2. O consumidor falha e faz nack/reject com requeue=false.
  3. O RabbitMQ remove a mensagem da fila principal.
  4. O RabbitMQ publica a mensagem na DLX configurada.
  5. A DLX roteia a mensagem para uma ou mais filas, normalmente uma DLQ.

Categorias: Programação
Tags: mensageria, rabbitmq
Publicado em: 08/06/2026 14:49 e Atualizado em: 08/06/2026 15:23

Compartilhe este post:

Facebook Twitter LinkedIn WhatsApp

Navegação de Post

Post anterior: Framework Spring
Próximo post: MR-MPS-SW

Posts Recentes

  • MPS
    MR-MPS-SW13 de junho de 2026
  • RabbitMQ
    RabbitMQ8 de junho de 2026
  • Spring
    Framework Spring7 de junho de 2026
  • oauth
    Identidade e acesso5 de junho de 2026
  • GoF
    Padrões de Projeto GoF1 de junho de 2026
  • Política de privacidade

2026. O Complemento de Dois. Todos os direitos reservados.