Transactional Outbox الگویی برای هماهنگ کردن تغییر داده در دیتابیس و انتشار پیام است. برنامه در همان تراکنش، هم داده کسبوکار و هم رکورد رویداد خروجی را ذخیره میکند.
یک سناریوی واقعی
پس از ثبت سفارش، رکوردی در جدول outbox ثبت میشود و Worker جداگانه آن را به Message Broker میفرستد.
این الگو خطر ثبت موفق سفارش بدون پیام را کاهش میدهد، اما تحویل دوباره پیام هنوز ممکن است و مصرفکننده باید Idempotent باشد.
سناریوی ذخیره داده و رویداد
BEGIN;
INSERT INTO orders (...);
INSERT INTO outbox_events (...);
COMMIT;
Worker polls outbox -> publishes message -> marks delivered
ثبت سفارش و رویداد خروجی در یک تراکنش از گم شدن پیام میان Commit دیتابیس و ارسال به Broker جلوگیری میکند. Worker ممکن است پیام را دوبار منتشر کند، پس مصرفکننده باید آیدمپوتنت باشد.