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 ممکن است پیام را دوبار منتشر کند، پس مصرف‌کننده باید آیدمپوتنت باشد.