محتويات الدورة

RabbitMQ / المتوسط: العمل المنسوخ وسلامة المحاولات وأدلة التشغيل / الدرس 9

عمال يتحملون التكرار وصندوق الصادر

إغلاق فجوة الحالة المرجعية والرسالة مع معالجة تكرار الناقل وآثار الوجهة صراحة.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • تحديد نافذة تعطل الكتابة المزدوجة للقاعدة والرسالة.
  • شرح المعالجة الذرية للهوية والأثر في الوجهة.

ليست عمليتان معاملة موزعة واحدة

لنفترض تأكيد طلب اصطناعي في قاعدة مرجعية ثم نشر مهمة ملصق. يترك التعطل بين الخطوتين حالة مؤكدة بلا مهمة. وقد ينشر عكس الترتيب عملاً لمعاملة قاعدة تفشل لاحقاً. لا تضم تأكيدات الناشر معاملة قاعدة اعتباطية، ولا تغلق إقرارات المستهلك فجوة جهة المنتج. يحفظ الصادر الحدث المقصود في معاملة القاعدة المدعومة نفسها مع تغير الحالة، ثم ينشر ناقل النيات المثبتة. القاعدة المهمة هي التثبيت المشترك للحالة التجارية ونية النشر الدائمة، لا مجرد تنفيذ الاستدعاءين في وقت ما.

حفظ مفتاح العملية الأصلي في النية

يكتب رسم SQL تأكيد الطلب وسجل صادر واحداً داخل معاملة توضيحية. يفترض جداول وقيوداً مناسبة لا تنشأ أو تختبر هنا. يحتاج التنفيذ الحقيقي عزلاً وتفرد هوية وتسلسلاً وتنظيفاً محدوداً مناسباً للمحرك. تعيد كتابة الصادر باتصال منفصل بعد التثبيت الفجوة. قد ينشر الناقل بنجاح ويتعطل قبل تعليم النية مرسلة، فتبقى إعادة النشر ممكنة. أما التعليم أولاً فيخاطر بالفقد. احفظ معرف العملية نفسه عبر استئناف الناقل، وتعامل مع عدم يقين التأكيد كحالة مصالحة.

sql رسم توضيحي للحالة المرجعية والصادر
BEGIN;
UPDATE lab_orders SET status = 'confirmed' WHERE id = 17;
INSERT INTO lab_outbox (operation_id, order_id, operation_type)
VALUES ('label-P17-v1', 17, 'calculate-label');
COMMIT;

لا يتصل بقاعدة؛ وتحتاج المعاملة قيود المحرك وتصميم ناقل منفصل.

إزالة التكرار حيث يثبت أثر العمل

يبقى المستهلك الذي يفحص مجموعة seen منفصلة ثم يرسل إشعاراً بعيداً معرضاً لسباق ونافذة تعطل. يجب أن تكون علامة الهوية والأثر ذريين بمعاملة أو بروتوكول منع تكرار تدعمه الوجهة، أو يصالحا ببديل صريح. تختفي مجموعة Python المتطايرة بعد الاستئناف. يجب أن يغطي احتفاظ إزالة التكرار أفق الإعادة المدعوم، وقد تحتاج الهوية نطاق مستأجر وعملية. لا تعني الحمولات المتساوية واقعة واحدة؛ فقد يتشابه مسحان مشروعان. حقق في تعارض حمولات بمفتاح ثابت، ولا تستبدلها بصمت.

فحص الهوية واتساق الحمولة محلياً

يتلقى النموذج عملية واحدة مرتين بالنتيجة نفسها وعملية مستقلة. يحتفظ بنتيجتين فريدتين ويتأكد من توافق المفتاح المكرر مع حمولته السابقة. يفحص قاعدة هوية مختارة في تنفيذ أحادي الخيط بالذاكرة، لا تزامناً دائماً أو عقد مزود دفع. يجب أن يقرر النظام الحقيقي رد العملية المطبقة مسبقاً؛ فقد تكون نتيجة مكتملة ثابتة أفضل من خطأ يسبب إعادة لا تنتهي. أبق عدد تسليمات النقل منفصلاً عن عدد العمليات الفريدة، كي لا تعد المصالحة إعادة إرسال مشروعة عملاً تجارياً إضافياً.

python نموذج محلي لاتساق الهوية والحمولة
deliveries = [('label-P17-v1', 'ready'), ('label-P17-v1', 'ready'), ('label-P18-v1', 'ready')]
results = {}
for operation_id, result in deliveries:
    if operation_id in results:
        assert results[operation_id] == result
    results[operation_id] = result
assert len(results) == 2
print(len(results))
الناتج المتوقع
2

تتوافق النسخة مع المحتوى السابق؛ ولا ينفذ أثر خارجي دائم ذري.

محاسبة كل نقل باستقلال

يستطيع التصميم الكامل تحديد التغييرات المرجعية ذات النيات، والنيات التي قبلها RabbitMQ، وآثار الوجهة الفريدة. قد تتباعد نقاط التحقق أثناء التعافي، ولا ينبغي اختصارها في عداد نجاح واحد. أدرج النيات المعلقة والنهائية في المراجعة، باحتفاظ يحفظ الأدلة المطلوبة. ينبغي أن يقر المستهلك بعد اكتمال حد مسؤوليته المدعوم فقط. لا ينفذ الدرس SQL ولا ينشئ صندوقاً ولا يتصل بوجهة. نموذجه المحلي اختبار ضيق؛ وتبقى ذرية الأنظمة وتعافي الناقل متطلبات تحتاج تكاملاً مستقلاً مصرحاً به.

الأخطاء الشائعة وإصلاحها

غياب مهمة لطلب مثبت بعد التعطل.

لماذا يحدث؟
تغيير القاعدة والنشر كتابتان غير منسقتين.
كيف تصلحه؟
احفظ نية دائمة ذرياً مع الحالة المرجعية.
كيف تتجنب تكراره؟
راجع التعطل بين كل خطوتين عبر الأنظمة.

نشر الناقل نية مرتين.

لماذا يحدث؟
نجاح النشر قبل تسجيل تقدم الناقل.
كيف تصلحه؟
احفظ الهوية واستخدم تحمل الوجهة للتكرار.
كيف تتجنب تكراره؟
اختبر الاستئناف بعد القبول وقبل علامة الإرسال.

منع علامة دائمة أثراً لم يحدث.

لماذا يحدث؟
تثبيت العلامة والأثر منفصلين.
كيف تصلحه؟
استخدم ذرية مدعومة أو مصالحة صريحة.
كيف تتجنب تكراره؟
اختبر جانبي حد العلامة والأثر.

اختبر فهمك

1. هل يضمن الصادر حدوث إشعار مرة واحدة تلقائياً؟

اعرض الحل المشروح

لا؛ يربط الحالة بنية دائمة عند تنفيذه بمعاملة. يبقى للناقل والإشعار نوافذ فشل. استخدم منع تكرار أو مصالحة تدعمها الوجهة، واحفظ الهوية عبر الإرسال غير المؤكد وإعادة المستهلك.

2. لماذا يقارن الفحص المحلي الحمولات مع المعرفات؟

اعرض الحل المشروح

يخالف معرف بمحتويين عقد العملية الثابتة. قد يخفي اختيار الأخير خطأ هوية أو طلباً متعارضاً. احفظ الدليل وحقق في الواقعة المرجعية؛ ولا تستبدل المقارنة قيد تفرد دائم وبروتوكول أثر ذري.

أهم ما تعلمته

  • يغلق الصادر فجوة الحالة والنية لا كل أثر خارجي.
  • تدعم الهوية والأثر الذري والأدلة التعافي الآمن.

المراجع الرسمية