Introdução
A comunicação entre sistemas mudou bastante nos últimos anos. Antes, era comum que uma aplicação chamasse outra diretamente e esperasse sua resposta. Isso funcionava, mas só até certo ponto: quanto maior o sistema, maior o acoplamento e menor a tolerância a falhas. Hoje, quando falamos em microsserviços, escalabilidade e resiliência, surge uma alternativa quase sempre mais saudável: a mensageria.
A ideia central é simples. Em vez de depender de resposta imediata, um serviço envia uma mensagem para uma fila e segue sua vida. Outro serviço, quando puder, lê essa mensagem e faz o trabalho necessário. Isso torna a aplicação mais leve, mais modular e mais preparada para lidar com períodos de carga alta.
Neste artigo, vamos entender o básico sobre mensageria, aprender como usar o RabbitMQ para organizar o fluxo de mensagens e criar exemplos práticos em Go.
O que é Mensageria e por que ela é tão útil
Mensageria é o padrão de comunicação onde sistemas conversam através do envio e consumo de mensagens, e não por chamadas diretas. Isso resolve alguns problemas comuns em arquiteturas tradicionais.
Imagine um serviço de API que precisa realizar diversas etapas a partir de uma única requisição, sendo que uma delas (ou mais) pode sofrer com lentidão devido a conexão instável, grande volume de dados ou processamento mais pesado. Se for feito de forma síncrona, basta um desses passos ficar lento para o serviço todo travar, ou até mesmo ocasionar em erros.
A mensageria permite deslocar essas tarefas para outro componente. Assim, a API recebe a requisição, separa o que precisa ser feito naquele momento (processamento síncrono) e o que não precisa ser concluído antes do retorno da API (processamento assíncrono).
Por exemplo, se houver a necessidade dessa requisição enviar um email ao final, a API pode retornar uma mensagem informando que o email será enviado, e designar o disparo desse email a um serviço de mensageria e que será feito de forma independente.
Uma cenário comum desse exemplo seria o enviar o e-mail de boas-vindas após um cadastro. Ao invés de ser feito de forma assíncrona na requisição, pode ser criada uma estrutura similar a esta:
Mensagem:
{
"usuario_id": 123,
"acao": "enviar_email_boas_vindas"
}
Isso vai para uma fila de mensagens. Depois, um outro serviço lê essa fila e manda o e-mail.
O que é RabbitMQ e como ele funciona
RabbitMQ é um message broker. Ele recebe mensagens, organiza essas mensagens em filas e garante que consumidores possam acessá-las com segurança. RabbitMQ implementa o protocolo AMQP, que define regras claras para envio, roteamento e entrega de mensagens.
O RabbitMQ se destaca pela simplicidade, estabilidade e pela facilidade de adaptação a diferentes cenários — desde pequenas aplicações até sistemas de alta disponibilidade. Dentre alternativas conhecidas estão Kafka, Redis Streams e SQS.
Alguns elementos básicos e fundamentais do RabbitMQ são:
• Produtor (Producer): Quem envia a mensagem
• Fila (Queue): Onde a mensagem fica armazenada
• Consumidor (Consumer): Quem lê e processa a mensagem
• Exchange: Responsável por decidir pra onde cada mensagem vai
• Binding: Associação, ou vínculo, entre uma exchange e uma fila
• Routing key: Chave usada para auxiliar no roteamento
O Exchange é a entidade na qual o Produtor publica mensagens, que são então roteadas para um conjunto de Filas. O objetivo do Exchange é encaminhar todas as mensagens que passam por ele para uma ou mais Filas ou outros Exchanges. O tipo de Exchange e as propriedades do Binding são usados para implementar a lógica de roteamento.
Uma Fila no RabbitMQ é uma coleção ordenada de mensagens. As mensagens são enfileiradas (criadas pelo Produtor) e desenfileiradas (entregues aos Consumidores) de maneira FIFO ("primeiro a entrar, primeiro a sair").
Top comments (0)