Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

👨‍💻 Lucas Silva
👨‍💻 Lucas Silva

Posted on

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çãopublisher é 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

Umconsumer é 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 umexchange, 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 ummatch 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

Asfilas no RabbitMQ são coleções ordenadas de mensagens, e elas seguem uma lógica deFirst In, First Out (FIFO) para o enfileiramento e desenfileiramento. Cada mensagem é processada em ordem, garantindo consistência no consumo.

Acknowledgement

Oacknowledgement é 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 umdead letter exchange, ou descartada, dependendo da configuração do camporequeue.

Dead Letter

Mensagens podem ser marcadas comodead-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

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

Brazilian developer learning a variety of frontend, backend, and infrastructure techniques and writing about them.
  • Joined

More from👨‍💻 Lucas Silva

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp