Outbox pattern đảm bảo message không bao giờ bị mất khi publish lên RabbitMQ đồng thời với update database.
- Thay vì update DB rồi publish (có thể mất message nếu publish fail), bạn ghi cả business data VÀ message vào DB trong cùng một transaction, sau đó một background job đọc outbox table và publish lên RabbitMQ.
- Đảm bảo: DB commit thành công thì message sẽ được publish; DB commit fail thì không có gì xảy ra.
- Sau khi publish thành công và nhận confirm, xóa record khỏi outbox.
- Thiết yếu cho event-sourced và saga architecture.