Mensageria em Microssistemas: Quando Ela Entrega Valor — e Quando Só Aumenta Sua Dívida Técnica

A Dor Real: O Microserviço que Vira Refém de Acoplamento Travestido de “Arquitetura Moderna”

O caos sempre começa igual: três serviços, dois bancos e um time empolgado com a ideia de que mensageria é sinônimo de escalabilidade. Resultado? Uma avalanche de filas desnecessárias, eventos irrelevantes e um acoplamento indireto tão forte que, quando um serviço cai, os outros começam a se comportar como gremlins pós-meia-noite.

**Mensageria sem propósito vira dívida técnica distribuída.**

O problema não é a tecnologia — é a falta de clareza sobre o que realmente deveria ser assíncrono, idempotente e desacoplado.

Como Resolver Sem Firula: Mensageria Só Entra Onde Há Valor de Negócio

Quer colocar Kafka, RabbitMQ ou SQS? Faça isso por motivos concretos:

  • Processos que não precisam de resposta imediata.
  • Cargas que variam muito e exigem buffering.
  • Integrações entre bounded contexts isolados.
  • Operações naturalmente event-driven.

Sem esses cenários, você não precisa de mensageria — precisa de um endpoint REST bem definido e uma boa modelagem.

Implementação de Sênior: Evento Real Num Microserviço Real

Aqui vai um exemplo prático com Kafka, simples e direto. É o tipo de implementação que resolve problema, não cria burocracia.

import { Kafka } from "kafkajs";

const kafka = new Kafka({ brokers: ["localhost:9092"] });

// Producer de evento de pedido criado
export async function publishOrderCreated(order) {
  const producer = kafka.producer();
  await producer.connect();
  await producer.send({
    topic: "order.created",
    messages: [
      {
        key: String(order.id),
        value: JSON.stringify(order),
      },
    ],
  });
  await producer.disconnect();
}

// Consumer para atualização de estoque
export async function startStockConsumer() {
  const consumer = kafka.consumer({ groupId: "stock-service" });
  await consumer.connect();
  await consumer.subscribe({ topic: "order.created", fromBeginning: false });

  await consumer.run({
    eachMessage: async ({ message }) => {
      const event = JSON.parse(message.value.toString());
      // lógica de estoque
      console.log("Atualizando estoque para order:", event.id);
    },
  });
}

Isso é mensageria usada com propósito: um serviço cuida do fluxo do pedido; outro cuida de estoque. Sem dependência direta, sem idas e vindas HTTP, sem nó cego.

O Custo da Escolha: Mensageria Resolve, Mas Cobra

Mensageria funciona, mas não é grátis. Eis o preço:

  • Observabilidade complica: você não vê mais uma call chain linear.
  • Reprocessamento exige idempotência: se não fez, vai sofrer.
  • Infra pesa: cluster Kafka não é “rodar um docker-compose e ser feliz”.
  • Debug vira arqueologia: eventos viajam, atrasam, se perdem e ressurgem.

**Se seu problema é simples, mensageria é munição demais para o alvo errado.**

Direto das Trincheiras — 3 Dicas Rápidas

  • Comece com um único tópico e um único produtor antes de espalhar eventos pelo sistema.
  • Trate idempotência antes de escrever uma linha de consumer — é isso que separa sistemas resilientes de bombas-relógio.
  • Escreva contratos de eventos como se fossem APIs: versão, schema, backward compatibility.

Fontes Relevantes

Nenhuma das fontes fornecidas é relacionada ao tema de mensageria, microserviços ou banco de dados e, portanto, foram filtradas conforme solicitado.

Obrigado por acompanhar essa reflexão até o fim!

Espero que esses pontos ajudem você a tomar decisões mais lúcidas no seu próximo projeto. Não deixe de conferir outros artigos aqui no blog, onde descascamos outros hypes da nossa área.

Valeu e até a próxima! 😉

Leave a Comment

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *