O RabbitMQ é um dos message brokers mais populares, conhecido por sua flexibilidade e robustez no processamento de mensagens. Este artigo apresenta os principais conceitos do RabbitMQ, incluindo publishers, consumers, exchanges, filas e mecanismos de reconhecimento de mensagens.
Publisher/Producer
Uma aplicação publisher é responsável por publicar ou produzir mensagens. Além disso, uma aplicação que publica mensagens também pode consumi-las.
No RabbitMQ, uma mensagem publicada precisa ser roteada para uma fila. Se houver consumidores online conectados à fila, a mensagem será enviada diretamente para eles.
Consumer
Um consumer é uma aplicação que consome mensagens de uma fila e realiza o reconhecimento (acknowledgement) dessas mensagens. Da mesma forma que um publisher pode consumir mensagens, um consumer também pode publicá-las.
Exchanges
No RabbitMQ, as mensagens não são enviadas diretamente para as filas. Os publishers enviam mensagens para um exchange, que é responsável por rotear as mensagens para filas específicas, com base nas ligações (bindings) e chaves de roteamento (routing keys).
Tipos de Exchanges
Os exchanges são categorizados de acordo com a forma como realizam o roteamento de mensagens:
- Direct: As mensagens são roteadas para filas cuja ligação (binding) coincida exatamente com a chave de roteamento (routing key).
- Fanout: Roteia mensagens para todas as filas que estejam conectadas a ele.
- Topic: Faz um match com base em padrões (wildcards) entre a chave de roteamento da mensagem e a chave de ligação das filas.
- Headers: Roteia mensagens com base nos cabeçalhos especificados na mensagem.
Queues
As filas no RabbitMQ são coleções ordenadas de mensagens, e elas seguem uma lógica de First In, First Out (FIFO) para o enfileiramento e desenfileiramento. Cada mensagem é processada em ordem, garantindo consistência no consumo.
Acknowledgement
O acknowledgement é o mecanismo de confirmação de que uma mensagem foi entregue e/ou processada pelo consumidor. Ele permite que o RabbitMQ saiba quando pode marcar uma mensagem como concluída ou quando deve reenviar a mensagem.
Delivery Acknowledgement
Existem diferentes formas de reconhecimento no RabbitMQ, que determinam quando uma mensagem é considerada processada com sucesso:
- Reconhecimento Automático: O RabbitMQ considera a mensagem processada assim que ela é entregue.
-
Reconhecimento Manual: Requer que o consumidor informe explicitamente o status da mensagem. Isso pode ser feito de forma positiva ou negativa:
-
basic.ack
: Usado para indicar que a mensagem foi processada com sucesso. -
basic.nack
: Usado para indicar que o processamento falhou. -
basic.reject
: Similar aobasic.nack
, mas com limitações (não suporta múltiplas mensagens ao mesmo tempo).
-
Quando o reconhecimento negativo ocorre, a mensagem pode ser reenfileirada, roteada para um dead letter exchange, ou descartada, dependendo da configuração do campo requeue
.
Dead Letter
Mensagens podem ser marcadas como dead-letter e republicadas caso algum dos seguintes eventos ocorra:
- A mensagem é negativamente reconhecida por um consumidor.
- A mensagem expira devido ao TTL (Time To Live).
- A mensagem excede o limite de tamanho configurado.
- A mensagem ultrapassa o limite de tentativas de entrega.
Dead letters permitem lidar com falhas de forma estruturada, garantindo maior resiliência no sistema.
Compreender esses conceitos é essencial para projetar sistemas de mensageria eficientes e confiáveis. O RabbitMQ oferece flexibilidade para adaptar-se a diversas arquiteturas, tornando-o uma ferramenta poderosa no ecossistema de aplicações distribuídas.
Top comments (0)