Satu transaksi untuk state dan niat event
Masalah dual-write terjadi ketika aplikasi berhasil menyimpan perubahan bisnis tetapi gagal mengirim event, atau mengirim event sebelum transaksi database benar-benar commit. Outbox menyimpan event sebagai row dalam transaksi bisnis yang sama.
Worker publisher membaca row yang belum terkirim, mengirimkannya ke broker, lalu menandai status publikasi. Karena publisher juga dapat mengulang, consumer tetap membutuhkan idempotency key.
Trade-off yang harus diterima
Outbox tidak membuat sistem menjadi exactly-once secara ajaib. Ia memberi batas kegagalan yang terlihat dan membuat proses retry dapat diamati. Itu sering lebih berharga daripada janji semantik yang tidak bisa diuji.