RabbitMQ / المتقدم: الملكية المرتبة والإعادة المحتفظ بها وقبول التعافي / الدرس 13
المستهلك النشط الواحد وترتيب المفاتيح
اختيار حدود ملكية تحفظ تسلسل العمل المطلوب دون الخلط بين ترتيب التسليم واكتمال الأثر.
في هذه الصفحة
أهداف الدرس
- شرح المستهلك النشط والاحتياطي في نموذج المستهلك النشط الواحد.
- مراجعة تقسيم المفاتيح والتحول عند الفشل والاكتمال غير المتزامن معاً.
تحديد العمليات التي تحتاج ترتيباً
قد يتطلب قبول الطرد وإرساله تسلسلاً للطرد نفسه، بينما تتقدم طرود مستقلة بالتوازي. حدد هذه القاعدة قبل اختيار المستهلكين. لا ينشئ تخزين الصف وتسليمه المرتبان ترتيباً سببياً عاماً بين ناشرين أو صفوف مستقلة. وقد ينتهي المعالجون المتزامنون بترتيب مختلف عن التسليم، وتزيد الأولوية والإعادة والتحول عند الفشل التعقيد. إذا رفضت الوجهة إصدارات قديمة، فذلك جزء صريح إضافي من الصحة، لا ميزة وسيط تلقائية. اختر أصغر نطاق تسلسل يلائم المتطلب، ووضح حد إنتاجيته.
يبقى المستهلك النشط الواحد محتاجاً آثاراً آمنة
يسمح نموذج المستهلك النشط الواحد بوجود مشتركين احتياطيين، بينما يستقبل واحد تسليمات الصف وفق سلوك نوعه المدعوم. عند اختفاء النشط قد يصبح آخر نشطاً. يختلف ذلك عن منع الاشتراكات الأخرى تماماً باختيار مستهلك حصري. قد يرسل النشط التسليمات إلى منفذ محلي متواز فيعيد ترتيب الآثار؛ لذا راجع تصميمه. قد يعاد العمل غير المقر حول التحول، ولا تعني الملكية الواحدة تنفيذاً مرة واحدة. تحقق من معاملات الإعلان ودعم النوع للإصدار، ولا تفترض تبديل الميزة في أي صف قائم دون ترحيل.
إبقاء المفتاح المعلن في مسار معالجة واحد
يسند النموذج المحلي معرفي طردين إلى مسارين مسميين ويتحقق من بقاء عمل P17 المتكرر في مساره المعلن. هذه خريطة تطبيق معطاة، لا تنفيذ إضافة تجزئة متسقة أو اختبار توجيه RabbitMQ. يحتاج التصميم الفعلي تسلسلاً حتمياً للمفتاح وخريطة ثابتة وسياسة ترحيل عند تغير عدد المسارات. لا تنتقل الرسائل الموجودة تلقائياً لحفظ الخريطة الجديدة. قد يهيمن طرد أو مستأجر ساخن على مساره؛ ولا تقسم زيادة العمال في مسارات أخرى تسلسل ذلك المفتاح. قس التفاوت منفصلاً عن السعة الإجمالية.
lanes = {'P17': 'labels-a', 'P18': 'labels-b'}
work = ['P17', 'P18', 'P17']
routed = [lanes[key] for key in work]
assert routed == ['labels-a', 'labels-b', 'labels-a']
print(routed)
['labels-a', 'labels-b', 'labels-a']
يستخدم عنصرا P17 المسار labels-a؛ ولا يختبر مبادل أو إضافة أو مجدول مستهلك.
مراجعة الملكية والمعالجة عقداً واحداً
يسجل JSON نية إعلان صف quorum مع x-single-active-consumer، وقاعدة تطبيق مستقلة لمعالجة المسار بالتسلسل. ليس وثيقة تعريفات كاملة ولا يستورد. يحل خيار الوسيط وقاعدة العامل جزأين مختلفين من الترتيب. قد يضيف فحص إصدار الوجهة دفاعاً ضد كتابة قديمة، لكن يجب أن تطابق المقارنة والتعارض عقد الحدث. لا تقر دفعة تتجاوز عملاً معلقاً لمجرد وجود مستهلك واحد نشط. يظل الإقرار والاكتمال الخارجي محتاجين حساباً متسقاً أثناء الإغلاق والاستبدال.
{"queue":"lab.labels-a","arguments":{"x-queue-type":"quorum","x-single-active-consumer":true},"application_processing":"serial-per-lane","preserve_operation_identity":true}
معاملات الصف وقاعدة التطبيق متطلبان منفصلان؛ ولا تعلن بنية.
اختبار الترتيب عند حدود الوجهة
يشمل اختبار مصرح تحديثين للمفتاح نفسه بمدتين مختلفتين، ومفتاحاً مستقلاً، واستبدال النشط، وعملية معادة. تحقق من إصدارات الوجهة المقبولة والآثار الفريدة لا ترتيب وصول callbacks فقط. لا ينشئ الدرس صفاً أو مستهلكاً ولا ينفذ تحوّلاً. يثبت الفحص حتمية الخريطة المعطاة فقط. ويحتاج الاعتماد التشغيلي أدلة دعم الصف وسعة الاحتياط وزمن التعافي. افصل تلك الخصائص غير المختبرة عن قاعدة التطبيق الصغيرة، ولا تقدم تأكيد Python ناجحاً اعتماداً شاملاً للترتيب.
الأخطاء الشائعة وإصلاحها
كتابة تحديثات الطرد خارج الترتيب رغم مستهلك نشط واحد.
- لماذا يحدث؟
- إعادة منفذه الداخلي المتوازي ترتيب اكتمال الآثار.
- كيف تصلحه؟
- سلسل نطاق المفتاح المطلوب أو طبق قاعدة إصدار وجهة.
- كيف تتجنب تكراره؟
- اختبر ترتيب الاكتمال بمدد عمل مختلفة عمداً.
كسر تغيير عدد المسارات تسلسل مفتاح قائم.
- لماذا يحدث؟
- عدم ترحيل خرائط التوجيه القديمة والجديدة معاً.
- كيف تصلحه؟
- خطط تغطية المصدر والترتيب خلال انتقال الخريطة.
- كيف تتجنب تكراره؟
- أدر إصدار الخريطة وعقد تسلسل المفتاح.
تكرار عملية مطبقة عند التحول.
- لماذا يحدث؟
- اكتمال الأثر قبل تأكد إقراره.
- كيف تصلحه؟
- استخدم هوية ثابتة وتطبيق وجهة يتحمل التكرار.
- كيف تتجنب تكراره؟
- أدرج الإعادة في قبول المعالجة المرتبة.
اختبر فهمك
1. هل يمنع المستهلك النشط الواحد مجمع خيوط محلياً من إنهاء التسليم الثاني أولاً؟
اعرض الحل المشروح
لا. تتحكم هذه الميزة في اشتراك المستهلك النشط لدى الوسيط، ولا تضبط كل قرار جدولة داخل التطبيق أو بعده. يجب أن يحافظ العامل على التسلسل المطلوب، أو أن ترفض الوجهة الإصدارات القديمة وفق قاعدة جرت مراجعتها. ميّز بين ترتيب وصول الاستدعاءات الراجعة، وترتيب اكتمال معالجة الرسائل، وترتيب إرسال إقرارات الاستهلاك؛ فكل منها مرحلة قابلة للملاحظة بصورة مستقلة.
2. لماذا لا يثبت قاموس المسارات وجود مبادل تجزئة متسقة مثبت؟
اعرض الحل المشروح
لأنه بيانات تطبيق عادية بخريطة معطاة يدوياً. لا يحمل إضافة أو يفحص قدرات الخادم أو التوجيه أو الترحيل. يحتاج نشر إضافة أدلة توافق وإعداد رسمية دقيقة. صف النتيجة بأنها حتمية للخريطة المعلنة فقط.
أهم ما تعلمته
- اختر نطاق الترتيب واحفظه في التنفيذ والتحول.
- تحل الملكية الواحدة وتحمل التكرار حالات فشل مختلفة.