RabbitMQ

A comunicação direta entre serviços funciona até um serviço cair e derrubar quem o chamou junto. O RabbitMQ coloca uma fila entre produtores e consumidores: o remetente publica uma mensagem e segue em frente, independente de o consumidor estar pronto.

TL;DR: Configure o RabbitMQ e implemente um padrão produtor-consumidor: publique mensagens em uma fila e processe-as de forma assíncrona.
Stack: RabbitMQ, Python (pika), Node.js (amqplib)
Nível: Intermediário
Tempo de leitura: ~8 min

Como funciona

O RabbitMQ é um message broker que desacopla a comunicação entre aplicações. Funciona com um modelo produtor-consumidor onde produtores publicam mensagens em um exchange, e o exchange as roteia para filas baseado em routing keys. Consumidores leem das filas de forma independente.

Rodando com Docker

docker run -d --hostname my-rabbit --name rabbit13   -p 8080:15672 -p 5672:5672 -p 25676:25676   rabbitmq:3-management

A interface de gerenciamento fica em http://localhost:8080. Login padrão é guest/guest (apenas acesso local).

Exemplos produtor-consumidor

Exemplos funcionais completos em Python e Node.js estão disponíveis em github.com/ferrerallan/rabbitmq-example-python e github.com/ferrerallan/rabbitmq-example-nodejs.

Tipos de Exchange

As mensagens vão primeiro para um exchange, que as roteia para as filas. A routing key é o caminho do exchange para a fila. Os principais tipos são Fanout (todas as filas recebem todas as mensagens), Direct (roteia por correspondência exata da routing key) e Topic (correspondência de padrão flexível com curingas).

ACK Manual

Por padrão, o RabbitMQ remove uma mensagem da fila quando ela é entregue. Com ACK manual, você controla quando a mensagem é reconhecida como processada. Isso evita perda de mensagens se o consumidor travar durante o processamento.

Configurar usuário admin

rabbitmqctl add_user admin suasenha
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

O que você construiu

Um setup funcional do RabbitMQ com um produtor enviando mensagens para uma fila e um consumidor processando-as de forma assíncrona. Os serviços estão desacoplados: o produtor não espera pelo consumidor.

Próximos passos

  • Configure um dead-letter exchange (DLX) para capturar mensagens que falham no processamento, permitindo inspeção e reprocessamento sem perda de dados.
  • Defina durable=True nas filas e delivery_mode=2 nas mensagens para persistência entre reinicializações do RabbitMQ.
  • Monitore a profundidade da fila e a utilização dos consumidores na UI de gerenciamento para detectar backpressure antes que vire um incidente.

Dúvidas ou feedback? Me encontre no LinkedIn ou GitHub.

Deixe um comentário