O que e Mensageria?

Uma forma de comunicação assíncrona onde sistemas trocam mensagens atraves de intermediários.

Mensageria, ou messaging, e um modelo de comunicação entre sistemas onde uma parte produz uma mensagem e a deposita em um intermediário, e outra parte le essa mensagem quando estiver pronta para processar. Diferente de uma chamada direta entre sistemas, a mensageria e assíncrona: o produtor não precisa esperar o consumidor processar. O intermediário, chamado de broker ou fila de mensagens, armazena as mensagens e garante a entrega mesmo que o consumidor esteja temporariamente indisponível. Esse modelo transforma a forma como sistemas distribuídos se comunicam, eliminando o acoplamento direto entre serviços e aumentando a resiliência geral do sistema.

Como funciona na prática

Produtor, broker e consumidor: tres papeis que desacoplam a comunicação.

Na mensageria, tres elementos estão sempre presentes. O Produtor e o serviço que gera e envia a mensagem. Ele não sabe quem vai processar, apenas deposita a mensagem no broker. O Broker e o intermediário que recebe, armazena e distribui as mensagens. Pode ser RabbitMQ, Apache Kafka, AWS SQS, Azure Service Bus, entre outros. O Consumidor e o serviço que le as mensagens do broker e as processa. Pode haver vários consumidores para a mesma fila, e o broker distribui as mensagens entre eles. Quando o consumidor processa com sucesso, confirma o recebimento (acknowledge). Se falhar, a mensagem pode ser reenviada. Essa arquitetura garante que nenhuma mensagem seja perdida mesmo em caso de falhas temporárias.

Exemplo prático em e-commerce

Pedido confirmado dispara mensagens para vários serviços sem acoplamento direto.

Em um e-commerce, quando um pedido e confirmado, o sistema precisa notificar vários outros serviços: o estoque precisa reservar os itens, o financeiro precisa registrar o pagamento, a logistica precisa criar o despacho e o email precisa enviar a confirmação. Sem mensageria, o serviço de pedidos precisária chamar todos esses serviços diretamente, criando um acoplamento fortissimo. Com mensageria, o serviço de pedidos apenas pública uma mensagem "PedidoConfirmado" no broker. Cada serviço interessado assina essa mensagem e a processa de forma independente. Se o serviço de logistica estiver fora do ar, a mensagem fica na fila e e processada quando ele voltar. O serviço de pedidos não precisa saber que a logistica existiu ou que estava com problema.

Exemplo prático em sistema de notificações

Millions de notificações processadas sem travar o fluxo principal.

Plataformas como marketplaces e redes sociais precisam enviar milhões de notificações por dia. Sem mensageria, um pico de atividade poderia derrubar o serviço de notificações e, por consequência, toda a plataforma. Com mensageria, o fluxo principal apenas deposita mensagens na fila de notificações. Os workers de notificação consomem essas mensagens no ritmo que conseguem processar. Em momentos de pico, a fila cresce, mas o sistema principal não e afetado. Basta adicionar mais workers consumindo a fila para aumentar o throughput. Esse padrão, chamado de "levelling da carga", e uma das aplicações mais comuns e valiosas da mensageria em sistemas de produção.

Padrões principais de mensageria

Point-to-point, publish-subscribe e request-reply resolvem cenários diferentes.

Existem vários padrões de mensageria para cenários diferentes. No padrão Point-to-Point, uma mensagem e enviada para uma fila específica e processada por exatamente um consumidor. E ideal para tarefas que não devem ser executadas mais de uma vez, como processar um pagamento. No padrão Publish-Subscribe, uma mensagem e publicada em um tópico e pode ser recebida por vários consumidores simultaneamente. E ideal para notificar múltiplos serviços sobre um evento. No padrão Request-Reply, o produtor envia uma mensagem e aguarda uma resposta assíncrona. E usado quando você precisa de mensageria mas precisa do resultado da operação. O broker escolhido define quais padrões estão disponíveis e como implementa-los.

Quando usar mensageria

Onde o desacoplamento, a resiliência e o processamento assíncrono são prioritários.

Mensageria e a escolha certa quando você precisa desacoplar serviços que não precisam se comunicar de forma síncrona, quando precisa garantir que tarefas sejam executadas mesmo que o serviço destino esteja temporariamente indisponível, quando precisa distribuir carga entre vários workers de forma elastica, ou quando um evento precisa disparar ações em múltiplos sistemas simultaneamente. Casos típicos incluem processamento de pagamentos, envio de emails e notificações push, sincronização de dados entre sistemas, processos em batch e integração entre sistemas legados e modernos. Em geral, qualquer processo que não precisa de resposta imediata e um candidato natural para mensageria.

Quando não usar mensageria

Para comunicações que exigem resposta imediata, APIs sincronas são mais simples.

Mensageria adiciona complexidade: um broker adicional para operar, lógica de retry e dead-letter queues para gerenciar, e a consistência eventual que precisa ser tratada. Para comunicações simples onde você precisa de uma resposta imediata, como verificar se um CPF e valido antes de continuar um cadastro, uma chamada síncrona via REST e muito mais simples e adequada. Também não faz sentido usar mensageria quando os sistemas envolvidos estão no mesmo processo ou mesmo servidor e não precisam escalar de forma independente. O overhead operacional de manter um broker de mensagens só se justifica quando os beneficios de desacoplamento e resiliência são realmente necessários para o sistema.

Vantagens da mensageria

Desacoplamento, resiliência, escalabilidade e absorvimento de picos de carga.

As vantagens da mensageria são significativas para sistemas distribuídos. O desacoplamento e talvez o maior beneficio: os serviços não precisam se conhecer diretamente, apenas precisam concordar sobre o formato da mensagem. Isso permite que cada serviço evolua, seja substituído ou seja escalado de forma totalmente independente. A resiliência também melhora muito: se um consumidor cai, as mensagens ficam na fila aguardando. Quando ele volta, continua do ponto onde parou, sem perder dados. A escalabilidade horizontal e natural: basta adicionar mais consumidores para aumentar o throughput de processamento. Por fim, a mensageria absorve naturalmente picos de carga, protegendo os serviços de sobrecargas pontuais.

Cuidados ao usar mensageria

Idempotência, ordenação, monitoramento e dead-letter queues precisam de atenção.

Os principais desafios da mensageria envolvem garantias de entrega e processamento. Mensagens podem ser entregues mais de uma vez, portanto os consumidores precisam ser idempotentes, ou seja, processar a mesma mensagem duas vezes deve ter o mesmo resultado que processar uma vez. A ordenação das mensagens também precisa ser considerada: em alguns brokers, a ordem não e garantida, e o consumidor precisa lidar com mensagens fora de ordem. As dead-letter queues são essenciais: mensagens que falham repetidamente precisam ir para um lugar especial para não bloquear o fluxo e para serem analisadas. Por fim, o monitoramento do tamanho das filas e fundamental para detectar quando um consumidor esta com problemas antes que a fila cresça demais.

Resumo final

Mensageria transforma como sistemas distribuídos se comunicam, com resiliência e escala.

Mensageria e uma das ferramentas mais importantes para construir sistemas distribuídos robustos. Ao substituir chamadas sincronas diretas por mensagens asincronas atraves de um broker, os sistemas ganham desacoplamento real, resiliência a falhas e capacidade de escalar cada parte de forma independente. O padrão não e para todo caso de uso, mas onde a comunicação assíncrona faz sentido, a mensageria entrega beneficios que dificilmente são alcancos de outra forma. O investimento em entender brokers como RabbitMQ e Kafka, em projetar consumidores idempotentes e em monitorar filas de forma eficaz e recompensado por sistemas mais resilientes e escaláveis.

Tutoriais em Video

Conceitos-chave

Produtor

Serviço que cria e envia mensagens para o broker, não precisa conhecer os consumidores

Broker

Intermediário que recebe, armazena e distribui mensagens (RabbitMQ, Kafka, SQS, Service Bus)

Consumidor

Serviço que le e processa mensagens do broker, pode haver vários para a mesma fila

Acknowledge (ACK)

Confirmação do consumidor de que processou a mensagem com sucesso

Dead-Letter Queue

Fila especial para mensagens que falharam repetidamente, permite análise e reprocessamento

Idempotência

Processar a mesma mensagem mais de uma vez tem o mesmo resultado, obrigatória em mensageria

Mensageria no Instagram

@bytebytego

Reels, Mensageria

@bytebytego

Mensageria no Facebook

Mensageria no X (Twitter)

@boyney123

Como filas de mensagens transformam sistemas distribuídos

Ver post completo no X →
@boyney123

Publish-subscribe vs point-to-point: quando usar cada um

Ver post completo no X →
@boyney123

Dead-letter queues e como lidar com falhas em mensageria

Ver post completo no X →
@boyney123

Messaging patterns: comparativo completo

Ver post completo no X →
@boyney123

Idempotência em consumidores de filas

Ver post completo no X →
@boyney123

Monitoramento de filas em produção

Ver post completo no X →

O que devs dizem

Felipe A. ★★★★★

Implementamos mensageria com RabbitMQ no fluxo de pedidos do marketplace. O serviço de pedidos ficou totalmente desacoplado de estoque, logistica e email. Quando a logistica ficou fora do ar por 2 horas, os pedidos continuaram sendo criados normalmente e foram processados quando ela voltou.

Renata C. ★★★★☆

O maior aprendizado foi projetar consumidores idempotentes desde o inicio. Tivemos problemas quando o broker reentregou mensagens após uma falha e o consumidor processou duas vezes. Depois que todos os consumidores ficaram idempotentes, o sistema ficou muito mais robusto.

Thiago P. ★★★★★

Usamos Kafka para absorver picos de atividade durante promoções. Sem mensageria, nosso sistema de notificações teria que processar 50 mil mensagens ao mesmo tempo. Com a fila, o sistema processa no seu ritmo e os usuários recebem as notificações em segundos, sem sobrecarga.