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

RabbitMQ / الأساسي: موارد البروتوكول والتوجيه والملكية / الدرس 1

المراسلة والاتصالات والقنوات

تحديد موضع الرسالة في AMQP 0-9-1 وتمييز موارد البروتوكول من هوية العمل.

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

أهداف الدرس

  • شرح مسؤوليات الناشر والمبادل والصف والمستهلك.
  • تمييز اتصال TCP والقناة وعملية التطبيق.

للرسالة عقد تطبيقي

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

تتبع مسار AMQP 0-9-1

يستخدم المسار الأساسي في هذا المقرر AMQP 0-9-1: يرسل الناشر إلى مبادل، وتوجه الروابط إلى صفوف، ويستقبل المستهلك التسليمات من الصف. تستخدم البروتوكولات المدعومة الأخرى مفاهيم وواجهات مختلفة؛ فلا تنقل قاعدة خاصة بالقناة إلى AMQP 1.0 أو MQTT أو بروتوكول Streams المخصص دون مراجعة. يوجه المبادل ولا يعمل صفاً محتفظاً به. يتقاسم مستهلكو الصف الواحد العمل عادة، بينما يحتاج المشتركون المستقلون صفوفاً منفصلة أو تصميماً مختاراً للتدفق. اختر علاقة التسليم قبل كتابة العميل.

تشترك القنوات في اتصال وتحتفظ بحالتها

يمكن لاتصال AMQP 0-9-1 حمل قنوات متعددة، لكل منها عمليات بروتوكول وحالة خاصة. يغلق إغلاق الاتصال قنواته. قد يغلق استثناء بروتوكول قناة واحدة مع بقاء الاتصال، لكن على التطبيق رصد الإغلاق وتصحيح سببه. يضيف فتح اتصال أو قناة لكل رسالة كلفة غير لازمة. أعد استخدام الموارد وفق قواعد تزامن العميل المختار، ولا تشارك قناة اعتباطياً بين خيوط العمال. تعرف أرقام القنوات ووسوم التسليم سياق البروتوكول، لا عمليات عمل دائمة تبقى ثابتة بعد إعادة الاتصال.

فحص غلاف مهمة صغير

يفصل JSON بين message_id وparcel_id، ويسجل إصدار عملية معلناً. هذا غلاف تطبيق، لا صيغة AMQP على السلك ولا مخطط يتحقق منه RabbitMQ. تحافظ إعادة إرسال طلب الملصق نفسه على هوية الرسالة الأصلية. أما طلب لاحق لإصدار ملصق مختلف، فيحتاج هوية عملية مستقلة مناسبة. تجنب العناوين والاعتمادات في تسميات التوجيه والمعرفات لأنها قد تظهر في التشخيص. حدد التعامل مع الإصدار غير المدعوم، كي لا يفسر عامل شكلاً جديداً للطلب بقواعد عمل قديمة بصمت.

json عقد مهمة ملصق اصطناعي
{"message_id":"label-P17-v1","parcel_id":"P17","operation":"calculate-label","operation_version":1}

تبقى الهوية ثابتة للإعادة؛ ولا يتحقق الوسيط تلقائياً من حقول العمل.

نمذجة السياق دون فتح اتصال

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

python مثال محلي لهوية تخص القناة
delivery_a = ('channel-a', 7)
delivery_b = ('channel-b', 7)
assert delivery_a != delivery_b
assert delivery_a[1] == delivery_b[1]
print(len({delivery_a, delivery_b}))
الناتج المتوقع
2

يبقى الرقمان المتساويان سياقين مختلفين؛ ولا تقر رسالة.

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

إعادة استخدام قناة مغلقة بعد خطأ بروتوكول.

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

إعطاء كل محاولة مفتاح عمل جديداً.

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

افتقاد تطبيقين مستقلين رسائل في صف مشترك.

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

اختبر فهمك

1. هل ينبغي استخدام وسم التسليم معرفاً دائماً لعملية إنشاء ملصق؟

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

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

2. هل يثبت فحص قيم Python المحلية قدرة عميل RabbitMQ على إعادة الاتصال بصورة صحيحة؟

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

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

أهم ما تعلمته

  • تختلف أعمار موارد البروتوكول وهويات العمل.
  • اختر تقاسم العمل أو الاشتراك المستقل عمداً.

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