Logo

dev-resources.site

for different kinds of informations.

RabbitMQ: conceitos fundamentais

Published at
1/12/2025
Categories
backend
systemdesign
programming
pubsub
Author
lukesilva
Author
9 person written this
lukesilva
open
RabbitMQ: conceitos fundamentais

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.

Fluxo básico de um sistema de mensageria

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).

Exemplo de direct exchange

  • Fanout: Roteia mensagens para todas as filas que estejam conectadas a ele.

Exemplo de exchange fanout

  • 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.

Exemplo de exchange baseada em tópicos

  • Headers: Roteia mensagens com base nos cabeçalhos especificados na mensagem.

Exmplo de exchange baseada em headers

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 ao basic.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:

  1. A mensagem é negativamente reconhecida por um consumidor.
  2. A mensagem expira devido ao TTL (Time To Live).
  3. A mensagem excede o limite de tamanho configurado.
  4. 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.

Referêcias

systemdesign Article's
30 articles in total
Favicon
Rate limiting : Global, Tumbling Window, and Sliding Window
Favicon
Designing the Spotify Top K
Favicon
Building RelaxTube: A Scalable Video Transcoding and Streaming Application
Favicon
Token Bucket Rate Limiter (Redis & Java)
Favicon
RabbitMQ: conceitos fundamentais
Favicon
CDNs in Distributed Systems: Beyond Caching for Better Performance
Favicon
Designing an Internet Credit Purchase System
Favicon
Context vs. State: Why Context is King in Software Systems
Favicon
Just thought about starting
Favicon
Hinted Handoff in System Design
Favicon
System Design: The Art of Balancing Trade-Offs
Favicon
Do you want to learn about System Design? I think this is a great article for you to get started with.
Favicon
Exploring the Intersection of Systems Engineering and Artificial Intelligence: Opportunities and Challenges
Favicon
From Concept to Deployment: The Lifecycle of a Systems Engineering Project
Favicon
Database less OTP- A concept
Favicon
Telemetry and Tracing: A Comprehensive Overview
Favicon
Asynchronous transaction in distributed system
Favicon
Fixed Window Counter Rate Limiter (Redis & Java)
Favicon
Kickstarting Weekly System Design Deep Dives: Building Scalable Systems
Favicon
Database Scaling NLogN 📈
Favicon
Navigating the World of Event-Driven Process Orchestration for Technical Leaders
Favicon
Load balancer vs Gateway vs reverse proxy vs forward proxy
Favicon
Kong API Gateway Setup Basic to advance usages
Favicon
Finding the Right Microsoft Platform for Your Applications
Favicon
PRESTO card Metrolinx fare system
Favicon
A Simple Guide for Choosing the Right Database
Favicon
loved reading it. Well Researched, Crisp and Informative #SystemDesign
Favicon
HTTP Caching in Distributed Systems
Favicon
HTTP Status Codes Explained
Favicon
Understanding Networking Communication Protocols

Featured ones: