Dalam tutorial sebelumnya kami membuat sakelar fanout. Kami dapat mengirimkan pesan ke banyak konsumen dalam bentuk siaran.
Apa yang harus dilakukan? Rute
Dalam tutorial ini, tambahkan fitur baru di mana kami dapat berlangganan hanya bagian dari pesan. Misalnya, hanya warna yang kami minati ("oranye", "hitam", "hijau") yang akan terhubung dan semua pesan akan dicetak di konsol.
Mengikat
Sakelar dan antrian adalah hubungan yang mengikat. Pemahaman yang sederhana adalah bahwa antrian tertarik pada informasi dari pertukaran ini.
Ikatan dapat ditambahkan dengan RoutingKey parameter tambahan. Spring-AMQP menggunakan API (Builder Mode) yang sederhana dan mudah dipahami untuk membuat hubungan di antara mereka sangat jelas. Menempatkan sakelar dan antrian ke dalam pengikat dan mengikat antrian ke sakelar dengan mudah dengan kunci perutean (RoutingKey).
@BeanPublic BINDING BINDING0A (DirectExchange DirectExchange, antrian autodeletequeue0) {return bindingBuilder.bind (autodeletequeue0) .to (DirectExchange) .with ("Orange");}Ini berarti bahwa kunci pengikatan tergantung pada jenis sakelar, dan sakelar fanout tidak dapat melakukannya tanpa opsi yang dapat diikat.
Sakelar koneksi langsung
Dalam tutorial sebelumnya, sistem pesan kami dikirimkan kepada semua konsumen dalam bentuk siaran. Kami ingin memperluas fitur untuk memasukkan filter berdasarkan jenis warna. Misalnya, kami ingin suatu program menerima pesan kesalahan terperinci dan menulisnya ke hard disk sebagai log, tanpa menerima info atau log peringatan.
Tiga kunci perutean: oranye, hitam dan hijau
Seperti yang ditunjukkan pada gambar di atas, ada 2 antrian yang terikat pada pertukaran koneksi langsung X. Antrian pertama menggunakan kunci perutean adalah oranye, dan yang kedua memiliki 2 kunci perutean, hitam dan hijau.
Dalam pengaturan ini, ketika pesan menggunakan tombol routing didorong ke sakelar, pesan akan dialihkan untuk mengantri Q1. Ketika kunci perutean yang digunakan oleh pesan adalah hitam atau hijau, itu akan dialihkan ke Q2. Pesan yang tersisa yang tidak menggunakan kunci perutean akan dibuang.
Ikatan paralel
Ikatan paralel
Ini dapat mengimplementasikan fungsi yang mirip dengan sakelar fanout.
Hampir, lihat kodenya
Config.java
Paket com.zb.rabbitmqtest.t4routing.config; impor org.springframework.amqp.core.*; Impor org.springframework.context.annotation.bean; impor org.springframework.context.annotation.onfigurasi;/** ** @springframework.context.annotation.onfiguration;/** @springframework. "T4Config") Config Class Public {/*** Dibuat oleh: Zhang Bo* Waktu: 2018/3/5 10:45 AM* @apinote Define Direct-Connected Exchange*/@Bean Public DirectExChange DirectExchange () {return new DirectExchange ("Direct-Exchange"); }/*** Pencipta: Zhang Bo* Waktu: 2018/3/5 10:48 AM* @apinote definisi untuk secara otomatis menghapus antrian anonim*/@bean antrian publik autodeletequeue0 () {return new anonymousqueue (); }/*** Pencipta: Zhang Bo* Waktu: 2018/3/5 10:48 AM* @apinote definisi untuk secara otomatis menghapus antrian anonim*/@bean antrian publik autodeletequeue1 () {return new anonymousqueue (); } /** * Created by: Zhang Bo* Time: 2018/3/5 10:48 am * @param directExchange Direct-connected switch* @param autoDeleteQueue0 Automatically delete queue* @apiNote Binding using the routing key orange queue to the direct-connected switch* @return Binding */ @Bean public Binding binding0a(DirectExchange directExchange, Queue autodeletequeue0) {return bindingBuilder.bind (autodeletequeue0) .to (DirectExchange) .with ("Orange"); } /** * Created by: Zhang Bo* Time: 2018/3/5 10:48 am * @param directExchange DirectExchange * @param autoDeleteQueue0 Automatically delete queue* @apiNote Binding using the routing key black queue to the direct switch* @return Binding */ @Bean public Binding binding0b(DirectExchange directExchange, Queue autodeletequeue0) {return bindingbuilder.bind (autodeletequeue0) .to (DirectExchange) .with ("Black"); } /** * Created by: Zhang Bo* Time: 2018/3/5 10:48 am * @param directExchange DirectExchange * @param autoDeleteQueue1 Automatically delete queue* @apiNote Binding using the autoDeleteQueue1 queue with the routing key black to the direct switch* @return Binding */ @Bean public Binding binding1a(DirectExchange directExchange, Antrian autodeletequeue1) {return bindingBuilder.bind (autodeletequeue1) .to (DirectExchange) .with ("Black"); } /** * Created by: Zhang Bo* Time: 2018/3/5 10:48 am * @param directExchange DirectExchange * @param autoDeleteQueue1 Automatically delete queue* @apiNote Binding using the routing key green queue to the direct switch* @return Binding */ @Bean public Binding binding1b(DirectExchange directExchange, Queue autodeletequeue1) {return bindingBuilder.bind (autodeletequeue1) .to (DirectExchange) .with ("Green"); }} Receiver.java
Paket com.zb.rabbitmqtest.t4routing.receiver; impor org.springframework.amqp.rabbit.annotation.rabbitlistener; impor org.springframework.stereotype./*** @Author zhang bo bo*/ @value = " @RabbitListener (queuees = "#{autodeletequeue0.name}") public void receiver0 (string str) {System.out.println ("receiver0 +++++++++++:"+str); } @RabbitListener (queues = "#{autodeletequeue1.name}") public void receiver1 (string str) {System.out.println ("receiver1 +++++++++++:"+str); }} Send.java
Paket com.zb.rabbitmqtest.t4routing.send; impor org.springframework.amqp.core.directexchange; impor org.springframework.amqp.rabbit.core.rabbittemplate; impor org.springframework.beans.core.rabbittemplate; Impor. org.springframework.stereotype./** * @author zhang bo 【[email protected]】 */ @komponen (value = "t4send") Kirim kelas publik {@Autowired swasta directexchange DirectExChange; @Autowired Private Rabbittemplate Rabbittemplate; private string [] keys = {"oranye", "black", "green"}; public void send () {string message = "hahaha"; untuk (int i = 0; i <5; i ++) {System.out.println ("Kirim ++++++++++++++:". Concat (pesan)); rabbittemplate.convertandsend (directexchange.getname (), keys [2], pesan); }}}
Sendtest.java
Paket com.zb.rabbitmqtest.t4routing.send; impor org.junit.test; impor org.junit.runner.runwith; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.boot.test.testest org.springframework.test.context.junit4.springrunner;/*** @author zhang bo*/ @runwith(springrunner.class)@springboottestpublic class sendtest {@Autowired send Send Send; @Test public void send () melempar pengecualian {send.send (); }} Hasil tes: Jika kunci [0], maka hanya ada penerima. Jika kunci [1], itu mirip dengan siaran, dengan ReceCT0 dan Recept1. Jika kunci [2], maka hanya ada menerima1.
Saat tombol [0]
Kirim ++++++++++++++: Hahaha
Kirim ++++++++++++++: Hahaha
Kirim ++++++++++++++: Hahaha
Kirim ++++++++++++++: Hahaha
Kirim ++++++++++++++: Hahaha
receiver0 +++++++++++++++: hahahaha
receiver0 +++++++++++++++: hahahaha
receiver0 +++++++++++++++: hahahaha
receiver0 +++++++++++++++: hahahaha
receiver0 +++++++++++++++: hahahahaSaat tombol [1]
Kirim ++++++++++++++: Hahaha
Kirim ++++++++++++++: Hahaha
Kirim ++++++++++++++: Hahaha
Kirim ++++++++++++++: Hahaha
Kirim ++++++++++++++: Hahaha
receiver1 +++++++++++++++: hahahaha
receiver1 +++++++++++++++: hahahaha
receiver0 +++++++++++++++: hahahaha
receiver0 +++++++++++++++: hahahaha
receiver0 +++++++++++++++: hahahaha
receiver1 +++++++++++++++: hahahaha
receiver1 +++++++++++++++: hahahaha
receiver0 +++++++++++++++: hahahaha
receiver1 +++++++++++++++: hahahaha
receiver0 +++++++++++++++: hahahahaSaat kunci [2]
Kirim ++++++++++++++: Hahaha
Kirim ++++++++++++++: Hahaha
Kirim ++++++++++++++: Hahaha
Kirim ++++++++++++++: Hahaha
Kirim ++++++++++++++: Hahaha
receiver1 +++++++++++++++: hahahaha
receiver1 +++++++++++++++: hahahaha
receiver1 +++++++++++++++: hahahaha
receiver1 +++++++++++++++: hahahaha
receiver1 +++++++++++++++: hahahaha
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.