ในบทช่วยสอนก่อนหน้านี้เราสร้างสวิตช์ Fanout เราสามารถส่งข้อความไปยังผู้บริโภคหลายรายในรูปแบบของการออกอากาศ
จะทำอย่างไร? การกำหนดเส้นทาง
ในบทช่วยสอนนี้เพิ่มคุณสมบัติใหม่ที่เราสามารถสมัครเป็นสมาชิกส่วนหนึ่งของข้อความ ตัวอย่างเช่นเฉพาะสีที่เราสนใจ ("สีส้ม", "ดำ", "สีเขียว") เท่านั้นที่จะเชื่อมต่อและข้อความทั้งหมดจะถูกพิมพ์บนคอนโซล
ผูก
สวิตช์และคิวเป็นความสัมพันธ์ที่มีผลผูกพัน ความเข้าใจที่เรียบง่ายคือคิวมีความสนใจในข้อมูลจากการแลกเปลี่ยนนี้
การเชื่อมสามารถเพิ่มด้วยพารามิเตอร์การกำหนดเส้นทางพิเศษ Spring-AMQP ใช้ API ที่ง่ายและเข้าใจง่าย (โหมด Builder) เพื่อให้ความสัมพันธ์ระหว่างพวกเขาชัดเจนมาก การใส่สวิตช์และคิวลงใน bindingbuilder และผูกคิวเข้ากับสวิตช์ได้อย่างง่ายดายด้วยคีย์การกำหนดเส้นทาง (RoutingKey)
@BeanPublic Binding Binding0a (DirectExChange DirectExChange, คิว AutodeLetequeue0) {ส่งคืน bindingBuilder.bind (Autodeletequeue0) .to (DirectExChange)ซึ่งหมายความว่าคีย์การเชื่อมโยงขึ้นอยู่กับประเภทสวิตช์และสวิตช์ Fanout ไม่สามารถทำได้หากไม่มีตัวเลือกที่สามารถผูกมัดได้
สวิตช์เชื่อมต่อโดยตรง
ในบทช่วยสอนก่อนหน้านี้ระบบการส่งข้อความของเราถูกส่งไปยังผู้บริโภคทุกคนในรูปแบบของการออกอากาศ เราต้องการขยายคุณสมบัติเพื่อรวมตัวกรองตามประเภทสี ตัวอย่างเช่นเราต้องการให้โปรแกรมรับข้อความแสดงข้อผิดพลาดโดยละเอียดและเขียนลงในฮาร์ดดิสก์เป็นบันทึกโดยไม่ได้รับข้อมูลหรือบันทึกเตือน
สามปุ่มเส้นทาง: สีส้มดำและเขียว
ดังที่แสดงในรูปด้านบนมี 2 คิวที่ถูกผูกไว้กับการแลกเปลี่ยนการเชื่อมต่อโดยตรง x คิวแรกใช้คีย์การกำหนดเส้นทางคือสีส้มและอันที่สองมี 2 คีย์การกำหนดเส้นทางสีดำและสีเขียว
ในการตั้งค่านี้เมื่อข้อความที่ใช้คีย์การกำหนดเส้นทางถูกส่งไปยังสวิตช์ข้อความจะถูกส่งไปยังคิว Q1 เมื่อคีย์การกำหนดเส้นทางที่ใช้โดยข้อความเป็นสีดำหรือสีเขียวมันจะถูกส่งไปยัง Q2 ข้อความที่เหลืออยู่ซึ่งไม่ได้ใช้คีย์การกำหนดเส้นทางจะถูกยกเลิก
การผูกมัดแบบขนาน
การผูกมัดแบบขนาน
สิ่งนี้สามารถใช้ฟังก์ชั่นคล้ายกับสวิตช์ Fanout
เกือบดูรหัส
config.java
แพ็คเกจ com.zb.rabbitmqtest.t4routing.config; นำเข้า org.springframework.amqp.core.*; นำเข้า org.springframework.context.annotation.bean; นำเข้า org.springframework.context.annotation "t4config") คลาสสาธารณะ config {/*** สร้างโดย: จางโบ* เวลา: 2018/3/5 10:45 am* @apinote กำหนดการแลกเปลี่ยนโดยตรงที่เชื่อมต่อโดยตรง*/@bean Public DirectExchange DirectExChange () {ส่งคืน DirecExChange ใหม่ ( }/*** ผู้สร้าง: Zhang Bo* เวลา: 2018/3/5 10:48 AM* @apinote นิยามเพื่อลบคิวนิรนามโดยอัตโนมัติ*/@bean สาธารณะ Autodeletequeue0 () {ส่งคืน anonymousequeue ใหม่ (); }/*** ผู้สร้าง: Zhang Bo* เวลา: 2018/3/5 10:48 AM* @apinote นิยามเพื่อลบคิวนิรนามโดยอัตโนมัติ*/@bean สาธารณะ Autodeletequeue1 () {ส่งคืน Anonymousequeue ใหม่ (); }/*** สร้างโดย: Zhang Bo* เวลา: 2018/3/5 10:48 AM* @Param DirectExChange สวิตช์เชื่อมต่อโดยตรง* @Param Autodeletequeue0 โดยอัตโนมัติลบคิว* @apinote การผูกมัดโดยใช้คีย์ส้ม autodeletequeue0) {return bindingbuilder.bind (autodeletequeue0) .to (directExchange). with ("Orange"); }/*** สร้างโดย: Zhang Bo* เวลา: 2018/3/5 10:48 AM* @Param DirectExChange DirectExchange* @Param Autodeletequeue0 โดยอัตโนมัติลบคิว* @apinote การผูกมัดโดยใช้คีย์คีย์คีย์ {return bindingbuilder.bind (autodeletequeue0) .to (directExchange). with ("black"); }/*** สร้างโดย: Zhang Bo* เวลา: 2018/3/5 10:48 AM* @Param DirectExChange DirectExchange* @param Autodeletequeue1 ลบคิวโดยอัตโนมัติ* @apinote ผูกพันโดยใช้การผูกมัด Autodeletequeue1 autodeletequeue1) {return bindingbuilder.bind (autodeletequeue1) .to (directExchange). with ("ดำ"); }/*** สร้างโดย: Zhang Bo* เวลา: 2018/3/5 10:48 AM* @Param DirectExChange DirectExChange* @Param Autodeletequeue1 ลบคิวโดยอัตโนมัติ* @apinote ผูกพันโดยใช้คีย์คีย์คีย์ {return bindingbuilder.bind (autodeletequeue1) .to (directExchange). with ("สีเขียว"); - ผู้รับ. java
แพ็คเกจ com.zb.rabbitmqtest.t4routing.receiver; นำเข้า org.springframework.amqp.rabbit.annotation.rabbitListener; นำเข้า org.springframework.stereotype.component; @RabBitListEner (queues = "#{Autodeletequeue0.Name}") โมฆะสาธารณะตัวรับสัญญาณ 0 (String str) {system.out.println ("ตัวรับสัญญาณ 0 +++++++++++ } @RabBitListEner (queues = "#{AutodeleTequeue1.Name}") โมฆะตัวรับสัญญาณสาธารณะ 1 (String str) {system.out.println ("ตัวรับสัญญาณ 1 +++++++++++ - send.java
แพ็คเกจ com.zb.rabbitmqtest.t4routing.send นำเข้า org.springframework.amqp.core.directexchange; นำเข้า org.springframework.amqp.rabbit.core.rabbittemplate; org.springframework.stereotype.Component;/** * @author Zhang Bo 【 [email protected] 】 */ @component (value = "t4send") คลาสสาธารณะส่ง {@autowired DirectExchange @autowired ส่วนตัว Rabbittemplate Rabbittemplate; สตริงส่วนตัว [] keys = {"สีส้ม", "ดำ", "เขียว"}; โมฆะสาธารณะส่ง () {ข้อความสตริง = "ฮ่าฮ่าฮ่า"; สำหรับ (int i = 0; i <5; i ++) {system.out.println ("ส่ง +++++++++++++:" concat (ข้อความ)); Rabbittemplate.convertandsend (DirectExchange.getName (), คีย์ [2], ข้อความ); }}}
sendtest.java
แพ็คเกจ com.zb.rabbitmqtest.t4routing.send นำเข้า org.junit.test; นำเข้า org.junit.runner.runwith; นำเข้า org.springframework.beans.factory.annotation.autowired; org.springframework.test.context.junit4.springrunner;/*** @author Zhang Bo*/ @runwith(springrunner.class)@springboottestpublic คลาส Sendtest {@autowired ส่วนตัวส่งส่ง; @Test โมฆะสาธารณะส่ง () พ่นข้อยกเว้น {send.Send (); - ผลการทดสอบ: หากเป็นคีย์ [0] จะมีเพียงตัวรับสัญญาณ 0 เท่านั้น ถ้าเป็นกุญแจ [1] มันจะคล้ายกับการออกอากาศโดยได้รับ 0 และรับ 1 ถ้าเป็นคีย์ [2] ก็จะได้รับเพียง 1
เมื่อคีย์ [0]
ส่ง +++++++++++++++: ฮ่าฮ่าฮ่า
ส่ง +++++++++++++++: ฮ่าฮ่าฮ่า
ส่ง +++++++++++++++: ฮ่าฮ่าฮ่า
ส่ง +++++++++++++++: ฮ่าฮ่าฮ่า
ส่ง +++++++++++++++: ฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 0 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 0 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 0 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 0 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 0 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่าเมื่อคีย์ [1]
ส่ง +++++++++++++++: ฮ่าฮ่าฮ่า
ส่ง +++++++++++++++: ฮ่าฮ่าฮ่า
ส่ง +++++++++++++++: ฮ่าฮ่าฮ่า
ส่ง +++++++++++++++: ฮ่าฮ่าฮ่า
ส่ง +++++++++++++++: ฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 1 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 1 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 0 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 0 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 0 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 1 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 1 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 0 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 1 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 0 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่าเมื่อคีย์ [2]
ส่ง +++++++++++++++: ฮ่าฮ่าฮ่า
ส่ง +++++++++++++++: ฮ่าฮ่าฮ่า
ส่ง +++++++++++++++: ฮ่าฮ่าฮ่า
ส่ง +++++++++++++++: ฮ่าฮ่าฮ่า
ส่ง +++++++++++++++: ฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 1 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 1 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 1 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 1 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่า
ตัวรับสัญญาณ 1 +++++++++++++++: ฮ่าฮ่าฮ่าฮ่า
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น