RabbitMQ / دليل حلول تحريري

حلقة محاولات تنتج فشلاً متكرراً أو آثاراً مكررة

تصنيف التسليم المتكرر وتاريخ dead-letter والآثار غير المؤكدة قبل تغيير الحدود أو الإعادة.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى

قاعدة معرفة للقراءة فقط · بلا تعليقات عامة

تعرّف على الأعراض

تفشل عملية الملصق نفسها مراراً، وتعود عبر requeue أو مسارات dead-letter، أو تنشئ إشعارات خارجية متعددة بعد استئناف العمال. قد ترتفع أعداد التسليم دون وجود عمل تجاري فريد إضافي، لذلك يجب فصل القياسين.

افهم الأسباب المحتملة

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

تحديد ما يتكرر وسببه

اجمع هوية العملية الثابتة وصف المصدر ومضيفه وفئة الفشل المنقحة ودليل إعادة التسليم وتاريخ dead-letter المعني. ليس redelivered قاعدة كاملة لتفرد العمل، وتجمع x-death الأحداث حسب الصف والسبب بدلاً من عد كل محاولة معالج عموماً. قارن إصدار الحمولة ومحتواها كي لا يختبئ تعارض هوية بوصفه إعادة عادية. لن يصلح requeue الفوري خطأ مخطط حتمياً. يحتاج عطل مزود مؤقت تأخيراً ومهلة محدودين. احفظ الأدلة الأصلية قبل أن يغير تصحيح أو إعادة مصرح بهما التاريخ الظاهر.

مراجعة حدود المحاولة وأمان النقل النهائي

ارسم كل مسار عودة وحدد وجهته النهائية ومسؤول المراجعة. لصفوف quorum في أساس 4.1 حد تسليم افتراضي أدخل في 4.0؛ وقد يزيل تعطيله لإسكات تنبيه حماية من حلقات الرسائل المعطلة. قد تختلف عدادات إعادة نشر التطبيق وإعادة تسليم الوسيط، فحدد اتفاقها صراحة. لا يضمن اسم DLX نقلاً آمناً إلى وجهة متاحة. لنقل quorum بنمط at-least-once متطلبات محددة وعواقب احتفاظ بالموارد، بينما قد يفقد النقل الافتراضي رسائل. قد يؤثر تغيير النمط أثناء الحادث في الرسائل المحتفظ بها مسبقاً، ولذلك يحتاج مراجعة.

فحص وجود الأثر مسبقاً

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

python عد محلي للتسليم مقابل العملية
deliveries = ['label-P17-v1', 'label-P17-v1', 'label-P18-v1']
unique_operations = set(deliveries)
assert len(deliveries) == 3
assert len(unique_operations) == 2
print(len(deliveries), len(unique_operations))
الناتج المتوقع
3 2

تفحص المجموعة تساوي الهوية المعطاة فقط ولا تحفظ أثراً خارجياً أو حالة محاولة.

استعادة عمل محدود دون إخفاء تغطية مفقودة

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

تحقق من نجاح الإصلاح

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

امنع تكرار المشكلة

  • احفظ هوية الواقعة الثابتة وميزانيات المحاولات المنتهية وأمان نقل dead-letter وتحمل الوجهة للتكرار معاً في عقد التطبيق. راجع هذه العناصر كلما تغير نوع الصف أو الاحتفاظ أو نطاق الإعادة أو سلوك المزود، ولا تعامل أحدها ضماناً يغني عن البقية.

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