📬 Outbox Pattern + Idempotência
Garante que eventos nunca se perdem. At-least-once + consumidor idempotente.
Regra de ouro: o evento e o estado de negócio commitam na mesma transação de banco. Nunca publique pro broker antes do commit.
O problema sem Outbox
Cenário: OrderService salva o pedido no banco e depois publica o evento pro broker. E se o broker estiver fora? O pedido existe, o evento não. O InventoryService nunca decrementa o estoque.
| Ordem das operações | O que pode dar errado |
|---|---|
| 1. Salva no banco ✓ 2. Publica no broker ✗ | Evento perdido para sempre |
| 1. Publica no broker ✓ 2. Salva no banco ✗ | Evento sem dado correspondente |
| Outbox: ambos na mesma transação | Atômico — tudo ou nada |