orders: 주문 상태 COMMITTED
outbox: event_id, payload, NEW
브로커 전송까지 원자적으로 묶는 패턴이 아니다. relay 재시도와 소비자 멱등성이 함께 있어야 운영에서 안전하다.
NEW 이벤트를 읽어 브로커로 전송하고 SENT로 표시한다. 장애가 나면 같은 이벤트를 다시 보낼 수 있다.
event_id 처리 이력이나 유니크 키로 중복 소비를 막는다.
DB 변경과 “보낼 메시지” 누락을 함께 막는다.
메시지 중복 발행은 정상적인 실패 모드다.
consumer idempotency와 relay 관찰 지표가 필요하다.