At-least-once delivery với outbox và explicit saga
Async giảm temporal coupling nhưng thêm duplicate, ordering, lag và reconciliation; “exactly once” không xóa external side effects.
Event contract
Event ID/type/version/time, aggregate ID/version, correlation/causation, minimal domain payload. Schema evolution backward/forward policy; partition key theo ordering requirement.
Transactional outbox
Business row và outbox insert cùng local transaction; relay publish rồi mark/checkpoint. Crash có thể publish duplicate nên consumer inbox/idempotent state transition vẫn bắt buộc.
Saga
OrderCreated → PaymentRequested/Completed/Failed → OrderConfirmed/Cancelled. Orchestration rõ state/timeout; choreography ít coordinator nhưng flow khó nhìn. Compensation là business action, không rollback thời gian.
Operations
Lag/oldest age, retry/DLQ, poison handling, replay authorization và audit. Reprocessing phải version-aware, bounded và không phát external effect trùng.