Event Bus
A infraestrutura que permite a comunicação assíncrona entre serviços por meio de eventos.
O que é um Event Bus?
É o mecanismo que permite que um serviço publique um fato relevante e que outros serviços reajam a ele sem a necessidade de chamadas diretas imediatas.
Por exemplo:
ms-orderspublicaOrderPlacedms-inventoryconsome esse eventoms-notificationstambém o consome
Por que usar eventos?
Porque eles ajudam a:
- desacoplar serviços no tempo
- reduzir dependências síncronas
- permitir múltiplas reações a um mesmo fato
- construir processos distribuídos
Responsabilidades principais
- Transporte de eventos
- Publicação e assinatura
- Retentativas
- Tratamento de mensagens com falha
- Suporte a DLQ
- Apoio a processos distribuídos
O que não deveria ser
O event bus não deveria se tornar um lugar onde vive a lógica de negócio central. A lógica de reação deve estar nos serviços consumidores.
Tampouco deveria ser usado como desculpa para publicar eventos ambíguos ou mal definidos.
Conceitos importantes
Evento de domínio
Representa algo significativo que aconteceu no negócio.
Idempotência
Necessária porque as mensagens podem chegar mais de uma vez.
Dead Letter Queue
Lugar para onde vão as mensagens que não puderam ser processadas corretamente.
At-least-once delivery
Garantia comum em muitos brokers: a mensagem chegará ao menos uma vez, mas pode ser duplicada.
Trade-offs
Benefícios
- Desacoplamento
- Escalabilidade
- Integração mais flexível
- Processamento distribuído
Custos
- Mais complexidade operacional
- Consistência eventual
- Observabilidade mais difícil
- Necessidade de retentativas e idempotência
Exemplo prático
Um pedido é criado e confirmado.
ms-orders publica OrderPlaced.
A partir daí:
- inventory dá baixa no estoque
- notifications envia a confirmação
- analytics registra o evento
Nenhum deles precisa ser chamado diretamente no mesmo fluxo síncrono.
Resumo
O Event Bus permite a comunicação assíncrona entre serviços. Seu valor está em desacoplar e distribuir responsabilidades, mas exige mais disciplina em contratos, observabilidade e idempotência.