Pular para o conteúdo
Wendeel Marinho
Engineering decisions

Architectural Decision Story · ADS-02

Event-driven architecture

Quando mensageria realmente resolve um problema?

Contexto

Ações em um domínio precisam disparar efeitos em outros — notificar sistemas externos, atualizar estoque, enviar webhooks — sem acoplar quem produz a quem consome.

Problema

Publicar eventos “depois” de salvar o estado abre uma janela em que um dos dois se perde. Mensageria mal aplicada troca acoplamento visível por acoplamento invisível.

Alternativas consideradas

Chamada síncrona
O chamador precisa da resposta para continuar e a dependência é estável.
Eventos com outbox transacional
O efeito pode ser assíncrono, mas não pode ser perdido.
Fila de tarefas simples
Trabalho pesado ou lento sem múltiplos consumidores.

Trade-offs

  • Desacoplamento e resiliência versus consistência eventual e depuração mais difícil.
  • Outbox garante atomicidade entre estado e evento, ao custo de uma tabela e um despachante a operar.
  • Consumidores precisam ser idempotentes: entregas duplicadas são normais.

Decisão

Usar eventos quando há múltiplos interessados ou quando o efeito pode atrasar mas não pode falhar silenciosamente — sempre com outbox, idempotência no consumidor e rastreabilidade de entrega.

Consequências

  • Cada evento vira contrato: versionamento e catálogo de eventos passam a ser necessários.
  • Observabilidade de filas (atraso, falhas, reprocesso) deixa de ser opcional.

Aprendizados

  • Mensageria resolve acoplamento temporal, não acoplamento de domínio.
  • Se um evento pode ser perdido, ele não é um evento de negócio — é uma esperança.