الأرنب الجزء 2. فهم التبادلات

Exchange - مبادل أو نقطة صرف. يتم إرسال الرسائل إليه. Exchange يوزع الرسالة في قائمة انتظار واحدة أو أكثر. هو يوجه الرسائل إلى قائمة انتظار بناءً على الروابط التي تم إنشاؤها (bindings) بينها وبين قائمة الانتظار.

Exchange ليس كذلك عملية إرلانج. لأسباب تتعلق بقابلية التوسع exchange عبارة عن سلسلة (رابط إلى الوحدة النمطية برمز حيث يوجد منطق التوجيه) في قاعدة البيانات المضمنة فقدان الذاكرة. ألف مبادل سوف يستهلك 1 ميغا بايت فقط من الذاكرة.

جدول المحتويات

  • الأرنب الجزء 1. مقدمة. Erlang و AMQP و RPC
  • الأرنب الجزء 2. فهم التبادلات
  • الأرنب الجزء 3. فهم قوائم الانتظار والارتباطات
  • الأرنب الجزء 4. التعامل مع ماهية الرسائل والأطر
  • الأرنب الجزء 5: نشر واستهلاك أداء الرسائل
  • الأرنب الجزء 6. نظرة عامة على وحدات الاتحاد والمجرفة
  • الأرنب الجزء 7. تفاصيل حول الاتصال وشانيل
  • الأرنب الجزء 8. RabbitMQ في .NET
  • الأرنب الجزء 9. الرصد

التبادل المباشر

Direct exchange - يستخدم عند الحاجة تسليم رسالة إلى قوائم انتظار محددة. يتم نشر الرسالة للمبادل مع محدد مفتاح التوجيه ويدخل في جميع قوائم الانتظار المرتبطة بهذا المبادل بمفتاح توجيه مشابه. مفتاح التوجيه عبارة عن سلسلة. تتم المطابقة باستخدام التحقق من السلاسل من أجل المساواة.

تمثيل رسومي لتدفق الرسالة:

الأرنب الجزء 2. فهم التبادلات

В rabbitmq هناك مفهوم المبادل الافتراضي. هذا direct exchange لا اسم. إذا تم استخدام المبادل الافتراضي ، فسيتم توجيه الرسالة إلى قائمة انتظار باسم يساوي مفتاح توجيه الرسائل.

موضوع الصرف

Topic exchange - مشابه direct exchange تمكن التوجيه الانتقائي من خلال مقارنة مفتاح التوجيه. ولكن ، في هذه الحالة ، يتم إعطاء المفتاح حسب النموذج. عند إنشاء قالب ، استخدم 0 أو كلمات أكثر (أحرف AZ и az والأرقام 0-9) ، مفصولة بنقطة ، بالإضافة إلى الرموز * и #.

  • * - يمكن الاستعاضة عنه بالضبط 1 كلمة
  • # - يمكن استبداله بـ 0 أو كلمات أكثر

تمثيل رسومي لتدفق الرسالة:

الأرنب الجزء 2. فهم التبادلات

بدءا من الإصدار RabbitMQ 2.4.0 خوارزمية التوجيه لـ topic exchange بدأ العمل حتى 145 مرات أسرع. لقد حققوا ذلك من خلال تنفيذ النهج تنفيذ تري، مما يدل على تمثيل القوالب كهيكل شجرة. على سبيل المثال القوالب a.b.c, a.*.b.c, a.#.c и b.b.c سيتم تمثيله بالهيكل التالي:

الأرنب الجزء 2. فهم التبادلات

يتم البحث عن مطابقة الأنماط بدءًا من الجذر والانتقال من أعلى إلى أسفل.

الميزات:

  • يمكن أن يصبح استخدام هذا المبادل اختيارًا جيدًا لتطوير التطبيقات المحتملة في المستقبل، لأن يمكن دائمًا تخصيص القوالب بحيث يتم نشر الرسالة بالمثل direct exchange أو fanout exchange
  • القوالب التي تستخدم * أسرع بكثيرمن القوالب التي تستخدم #.
  • topic exchange أبطأ direct exchange

تبادل Fanout

Fanout exchange - يتم تسليم كافة الرسائل إلى كافة قوائم الانتظار حتى إذا تم تحديد مفتاح توجيه في الرسالة.

الميزات:

  • RabbitMQ لا يعمل مع مفاتيح التوجيه والقوالب مما له تأثير إيجابي على الأداء. هذا هو الأسرع exchange;
  • يجب أن يكون جميع المستهلكين قادرين على معالجة جميع الرسائل ؛

تمثيل رسومي لتدفق الرسالة:

الأرنب الجزء 2. فهم التبادلات

تبادل الرؤوس

Headers exchange - يوجه الرسائل إلى قوائم الانتظار ذات الصلة بناءً على مقارنة أزواج من خصائص (مفتاح ، قيمة) headers خاصية الربط والرسالة المماثلة. headers وهو يمثل Dictionary<ключ, значение>.

إذا قمت بإضافة مفتاح خاص إلى القاموس x-match مع معنى any، ثم يتم توجيه الرسالة إذا كانت الأزواج (المفتاح ، القيمة) متطابقة جزئيًا. هذا السلوك مشابه لعامل التشغيل or.

var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");

المفتاح الافتراضي x-match يحتوي على قيمة all. هذا يعني أن الرسالة يتم توجيهها عندما تتطابق الأزواج (المفتاح والقيمة) تمامًا. هذا السلوك مشابه لعامل التشغيل and.

تمثيل رسومي لتدفق الرسالة:

الأرنب الجزء 2. فهم التبادلات

الميزات:

  • مرونة إضافية
  • النفقات الحسابية الإضافية. كل أزواج (مفتاح ، قيمة) للسمة headers يجب فرزها حسب اسم المفتاح قبل حساب قيم توجيه الرسائل. أبطأ من أنواع التبادل الأخرى.

تبادل تجزئة متسق

هذا المبادل توصيل في и غير مدمج в RabbitMQ.

Consistent-hashing exchange (تبادل تجزئة متناسق) - يُستخدم عند وجود قوائم انتظار متعددة من المستلمين المحتملين للرسالة وعندما تحتاج إلى موازنة التحميل بينهم. ترتبط الرسالة بقائمة الانتظار حسب الوزن (قيمة سلسلة شرطية من 0 - n).

الوزن المكافئ لقوائم الانتظار - يشير إلى أن كل قائمة انتظار ستتلقى عن نفس المبلغ الرسائل (سيتم وضع كل رسالة في قائمة انتظار واحدة فقط). لا يوجد ضمان كامل للتوزيع المنتظم للرسائل.

تمثيل رسومي لتدفق الرسالة:

الأرنب الجزء 2. فهم التبادلات

Hash محسوبة على أساس مفتاح التوجيه أو الممتلكات headers رسائل. إذا كانت جميع الرسائل المنشورة تحتوي على مفاتيح توجيه مختلفة ، أو headers، فسيتم التوزيع بالوزن. خلاف ذلك ، سيتم استخدام مفتاح التوجيه ، أو headers.

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

مجموعة المبادلات (E2E)

يمكن الجمع بين سلوك جميع المبادلات باستخدام الاتصال التبادل إلى الصرف (لم يتم تضمين مجموعة المبادلات في المواصفات AMQP. هذا امتداد بروتوكول من الجانب RabbitMQ).

تمثيل رسومي لتدفق الرسالة:

الأرنب الجزء 2. فهم التبادلات

من خلال E2E يمكننا العثور على التكوين المناسب القابل للتطوير الذي يلبي المتطلبات الحالية والمتنامية.

قم بإنشاء تبادل

يتم إنشاء المبادل باستخدام متزامن RPC طلب إلى الخادم. يتم الطلب باستخدام الطريقة Exchange.Declareدعا مع المعلمات:

  • اسم المبادل
  • نوع المبادل
  • خيارات أخرى

مثال الخلق exchange بواسطة RabbitMQ العميل:

//...
channel.ExchangeDeclare(
    exchange: "my_exchange",
    type: "direct",
    durable: "false",
    autoDelete: "false",
    arguments: null
);
//...

  • exchange - اسم المبادل الذي نريد إنشاءه. يجب أن يكون الاسم فريدًا
  • type - نوع المبادل
  • durable - في حالة التثبيت trueثم exchange ستكون دائمة. سيتم تخزينه على القرص وسيكون قادرًا على البقاء على قيد الحياة بعد إعادة تشغيل الخادم / الوسيط. إذا كانت القيمة falseثم exchange مؤقت وسيتم إزالته عند إعادة تشغيل الخادم / الوسيط
  • autoDelete - الحذف التلقائي. Exchange سيتم حذفه عند حذف جميع قوائم الانتظار المرتبطة
  • arguments هي حجج اختيارية. في أغلب الأحيان ، من خلال الحجج المحددة alternative exchange (مبادل بديل). إذا لم تتمكن الرسالة من المرور عبر المسار الأصلي ، فيمكن إرسالها إلى تبادل بديل ليتم توجيهها على طول مسار مختلف.

الأرنب الجزء 2. فهم التبادلات

إذا كان الخلق exchange ربما، ثم سيرسل الخادم العميل بشكل متزامن RPC إجابة Exchange.DeclareOk. إذا كان الخلق مستحيل (كان هناك رفض على الطلب Exchange.Declare)، الذي - التي ستغلق القناة الخادم باستخدام أمر غير متزامن Channel.Close وسيحصل العميل على استثناء عملية InterruptException، والتي سوف تحتوي على رمز الخطأ ووصفه.

يجب إنشاء مبادل قبل النشر. إذا قمت بنشر رسالة إلى مبادل غير موجود - RabbitMQ قم بإزالته بصمت.

قم بإنشاء Exchange GUI

انتقل إلى لوحة الإدارة RabbitMQ تحت المستخدم guest (اسم المستخدم: guest وكلمة المرور: guest). يرجى ملاحظة أن المستخدم guest يمكن الاتصال فقط من المضيف المحلي. الآن دعنا ننتقل إلى علامة التبويب Exchanges وانقر فوق Add a new exchange. املأ الخصائص:

الأرنب الجزء 2. فهم التبادلات

تم وصف معظم الخصائص أعلاه. هنا نلاحظ أنه إذا قمنا بتعيين Internal، ثم لا يمكن استخدام التبادل إلا لـ E2E. Producer لن تكون قادرة على إرسال رسائل إلى مثل هذا التبادل.

اختتام

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

إذا كان هناك في الرسم البياني الذي تم إنشاؤه مجموعة محدودة مفاتيح التوجيه ، إذن ، الأمر يستحق النظر نحو عدة مفاتيح fanout exchange، وهي 1: 1 مرتبطة بمفتاح التوجيه. تذكر ذلك fanout exchange الأسرع.

إذا كان عدد الطرق يميل إلى اللانهاية، يجدر الانتباه إلى topic exchange أو ، إذا لم تكن هناك حاجة إلى القالب ، فيمكنك الاختيار direct exchnge، لأن هو أسرع topic exchange.

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

عدد exchange يجب أن تكون قوائم الانتظار في حدها الأدنى مقارنةً بعدد المسارات.

في المقالة التالية ، سنبدأ في فهم المزيد حول قوائم الانتظار والربط.

مراجع

المصدر: www.habr.com

إضافة تعليق