الگوی Transactional Outbox چیست؟#

تصور کنید سفارش کاربر در دیتابیس ذخیره شود اما قبل از ارسال پیام به سیستم انبار، سرور قطع شود؛ سفارش ثبت شده اما هیچ محصولی ارسال نمی‌شود! در این الگو، پیام در همان تراکنش دیتابیس در جدولی به نام outbox ذخیره می‌شود و یک فرآیند جداگانه آن را با اطمینان به صف ارسال می‌کند.

یک تشبیه روزمره#

صندوق خروجی نامه‌های اداری؛ کارمند نامه را می‌نویسد و داخل پوشه نامه‌های ارسالی روی میز می‌گذارد. حتی اگر برق شرکت برود، نامه‌رسان بعداً پوشه را برمی‌دارد و حتماً به مقصد می‌رساند.

اجزای الگو#

  • جدول Outbox در همان پایگاه داده اصلی
  • ابزار Change Data Capture (مثل Debezium) برای خواندن لاگ دیتابیس
  • انتشار پیام بدون ریسک ناهمگامی دوگانه (Dual-Write Problem)