الـ At-Least-Once Delivery في الـ Outbox Pattern وكيفية التعامل معاه
ليه الـ Outbox Pattern ممكن يبعت الرسالة مرتين؟ بالبلدي كده: ليه الـ Outbox Pattern ممكن يبعت الرسالة مرتين؟ 🚚📬 تخيل إنك صاحب محل، وعندك كشكول وتسجل فيه الأوردرات (ده الـ Outbox Table)، وعندك دليفري مهمته ياخد الأوردر من الكشكول ويروح يسلمه للزبون (ده الـ Message Relay / Background Worker). لما حد بيطلب أوردر، أنت بتكتب الأوردر في الكشكول وفي نفس اللحظة بتخصم البضاعة من المخزن في Database Transaction واحدة. ✍️✨ الأوردر كده اتسجل صح ومش هيضيع إطلاقاً. ⚠️ إيه بقى سيناريو المشكلة اللي بيخليها At-Least-Once؟ الدليفري بيمشي بالخطوات دي بالضبط: يشوف الكشكول: يلاقي أوردر مكتوب عليه Pending أو "جديد". 📖 يروح يوصل الأوردر: للزبون (يبعت الرسالة للـ Broker زي RabbitMQ أو Kafka). الزبون استلم الأوردر خلاص! 📦💨 يرجع للمحل يشيّر على الكشكول: إنه تم التوصيل ( Mark as Processed / Published ). 📝✅ السؤال بقى: إيه اللي يحصل لو الدليفري اتعطل بين خطوة 2 وخطوة 3؟ 💥 ...