في البرنامج التعليمي السابق ، أنشأنا مفتاح Fanout. يمكننا توصيل الرسالة إلى العديد من المستهلكين في شكل البث.
ما يجب القيام به؟ التوجيه
في هذا البرنامج التعليمي ، أضف ميزة جديدة حيث يمكننا الاشتراك في جزء فقط من الرسالة. على سبيل المثال ، سيتم توصيل الألوان التي يهتم بها فقط ("Orange" ، "Black" ، "Green") وسيتم طباعة جميع الرسائل على وحدة التحكم.
ربط
التبديل وقائمة الانتظار هي علاقة ملزمة. الفهم البسيط هو أن قائمة الانتظار مهتمة بالمعلومات من هذا التبادل.
يمكن إضافة الربط باستخدام RoutingKey الإضافي. يستخدم Spring-AMQP واجهة برمجة تطبيقات بسيطة وسهلة الفهم (وضع الباني) لجعل العلاقة بينهما واضحة للغاية. وضع المفتاح وقائمة الانتظار في bindingbuilder وربط قائمة الانتظار بالمفتاح بسهولة باستخدام مفتاح التوجيه (RoutingKey).
BIANPublic Binding Binding0a (DirectExchange DirectExchange ، Queue AutodeleTequeue0) {return bindingbuilder.bind (autodeleteque0) .to to (directExchange) .with ("Orange") ؛}هذا يعني أن مفتاح الربط يعتمد على نوع التبديل ، ولا يمكن لمفتاح Fanout القيام بذلك بدون خيارات يمكن ربطها.
مفتاح الاتصال المباشر
في البرنامج التعليمي السابق ، تم تسليم نظام المراسلة الخاص بنا إلى جميع المستهلكين في شكل بث. نريد التوسع في الميزات لتضمين المرشحات على أساس أنواع الألوان. على سبيل المثال ، نريد أن يتلقى البرنامج رسائل خطأ مفصلة وكتابتها على القرص الثابت كسجل ، دون تلقي معلومات أو سجلات تحذير.
ثلاثة مفاتيح توجيه: البرتقال والأسود والأخضر
كما هو موضح في الشكل أعلاه ، هناك قوائم دراستين مرتبطة بتبادل الاتصال المباشر X. يستخدم قائمة الانتظار الأولى مفاتيح التوجيه برتقالية ، والثاني يحتوي على مفتاحين توجيه ، أسود وأخضر.
في هذا الإعداد ، عند الضغط على رسالة باستخدام مفتاح التوجيه إلى التبديل ، سيتم توجيه الرسالة إلى قائمة الانتظار Q1. عندما يكون مفتاح التوجيه المستخدمة في الرسالة أسودًا أو أخضرًا ، سيتم توجيهه إلى Q2. سيتم التخلص من الرسائل المتبقية التي لا تستخدم مفتاح التوجيه.
الربط الموازي
الربط الموازي
هذا يمكن أن ينفذ وظائف مماثلة لمفاتيح المعجبين.
تقريبا ، انظر إلى الكود
config.java
package com.zb.ribbitmqtest.t4routing.config ؛ استيراد org.springframework.amqp.core.*؛ استيراد org.springframework.context.annotation.bean "T4Config") config classe {/*** تم إنشاؤه بواسطة: Zhang Bo* الوقت: 2018/3/5 10:45 AM* apinote تعريف التبادل المباشر*/bean public directExchange DirectExchange () {return directExchange جديد ("direct-exchange") ؛ }/*** Creator: Zhang Bo* الوقت: 2018/3/5 10:48 AM* apinote تعريف لحذف قائمة انتظار مجهولة المصدر تلقائيًا*/ @bean public queue autodeleteque0 () {return new Anonymouseue () ؛ }/*** Creator: Zhang Bo* الوقت: 2018/3/5 10:48 AM* apinote تعريف لحذف قائمة انتظار مجهولة المصدر تلقائيًا*/ @bean public queue autodeletequeue1 () {return new Anonymouseue () ؛ }/*** تم إنشاؤه بواسطة: Zhang bo* الوقت: 2018/3/5 10:48 AM* param directexchange التبديل المباشر المرتبط* param autodeleteque0 حذف قائمة انتظار Queue* @ @apinote باستخدام quege tutode queue queue queue quiue quiue quiue quige quinge quige quinge quege quinge quege quege quege quege muil {return bindingbuilder.bind (autodeleteque0) .to to (directExchange) .with ("Orange") ؛ }/*** تم إنشاؤه بواسطة: Zhang bo* الوقت: 2018/3/5 10:48 AM* param directexchange directexchange* param autodeleteque0 حذف قائمة الانتظار تلقائيًا* apinote binding باستخدام مفتاح التوجيه الأسود Quite interexch in queue in queue in queue in queue in queue in queue in queue in queue in queue in queue in queue in queue in queue in queue in que. bindingbuilder.bind (autodeletequeue0) .to to (directExchange). with ("Black") ؛ }/*** تم إنشاؤه بواسطة: Zhang bo* الوقت: 2018/3/5 10:48 AM* param directexchange directexchange* param autodeletequeue1 حذف قائمة الانتظار تلقائيًا* apinote binding باستخدام Quitex QueCeue Quitex. AutoDeleTequeue1) {return bindingbuilder.bind (autodeletequeue1) .to to (directExchange) .with ("Black") ؛ }/*** تم إنشاؤه بواسطة: Zhang bo* الوقت: 2018/3/5 10:48 AM* param directexchange directexchange* param autodeletequeue1 حذف قائمة الانتظار تلقائيًا* apinote binding باستخدام Queue Green tokue internate interneex in interneex. bindingbuilder.bind (autodeletequeue1) .to to (directExchange). with ("Green") ؛ }} المتلقي
package com.zb.ribbitmqtest.t4routing.receiver ؛ استيراد org.springframework.amqp.rabbit.annotation.RabbitListener ؛ import org.springframework.stereotype.CordoNTOMED.component ؛/*** author zhang bo*/ @ @value = "t4ReCeiver". rabbitListener (queues = "#{autodeleteque0.name}") public void receiver0 (String str) {system.out.println ("requiver0 +++++++++:"+str) ؛ } rabbitListener (queueS = "#{autodeletequeue1.name}") public void receiver1 (String str) {system.out.println ("requiver1 +++++++++:"+str) ؛ }} send.java
package com.zb.ribbitmqtest.t4routing.send ؛ استيراد org.springframework.amqp.core.directexchange ؛ استيراد org.springframework.amqp.rabbit.core.ribbittemplate org.springframework.stereotype.component ؛/** * Author Zhang Bo 【[email protected]】 */ @component (value = "t4send") الفئة العامة إرسال {autowired directexchange direcchange ؛ @autowired rabbittemplate rabbittemplate ؛ سلسلة خاصة [] Keys = {"Orange" ، "Black" ، "Green"} ؛ public void send () {string message = "hahaha" ؛ لـ (int i = 0 ؛ i <5 ؛ i ++) {system.out.println ("send +++++++++++:". concat (message)) ؛ rabbittemplate.convertandsend (directExchange.getName () ، Keys [2] ، message) ؛ }}}
sendtest.java
package com.zb.ribbitmqtest.t4routing.send ؛ استيراد org.junit.test ؛ استيراد org.junit.runner.runwith ؛ استيراد org.springframework.beans.factory.annotation.autowired org.springframework.test.context.junit4 test public void send () rems {send.send () ؛ }} نتائج الاختبار: إذا كانت مفاتيح [0] ، فهناك Receiver0 فقط. إذا كانت مفاتيح [1] ، فهي مشابهة للبث ، مع تلقي 10 و RESET1. إذا كانت مفاتيح [2] ، فهناك تلقي 1 فقط.
عندما المفاتيح [0]
إرسال +++++++++++++: Hahaha
إرسال +++++++++++++: Hahaha
إرسال +++++++++++++: Hahaha
إرسال +++++++++++++: Hahaha
إرسال +++++++++++++: Hahaha
receiver0 +++++++++++++: hahahaha
receiver0 +++++++++++++: hahahaha
receiver0 +++++++++++++: hahahaha
receiver0 +++++++++++++: hahahaha
receiver0 +++++++++++++: hahahahaعندما مفاتيح [1]
إرسال +++++++++++++: Hahaha
إرسال +++++++++++++: Hahaha
إرسال +++++++++++++: Hahaha
إرسال +++++++++++++: Hahaha
إرسال +++++++++++++: Hahaha
receiver1 +++++++++++++: hahahaha
receiver1 +++++++++++++: hahahaha
receiver0 +++++++++++++: hahahaha
receiver0 +++++++++++++: hahahaha
receiver0 +++++++++++++: hahahaha
receiver1 +++++++++++++: hahahaha
receiver1 +++++++++++++: hahahaha
receiver0 +++++++++++++: hahahaha
receiver1 +++++++++++++: hahahaha
receiver0 +++++++++++++: hahahahaعندما مفاتيح [2]
إرسال +++++++++++++: Hahaha
إرسال +++++++++++++: Hahaha
إرسال +++++++++++++: Hahaha
إرسال +++++++++++++: Hahaha
إرسال +++++++++++++: Hahaha
receiver1 +++++++++++++: hahahaha
receiver1 +++++++++++++: hahahaha
receiver1 +++++++++++++: hahahaha
receiver1 +++++++++++++: hahahaha
receiver1 +++++++++++++: hahahaha
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.