Im vorherigen Tutorial haben wir einen Fanout -Switch erstellt. Wir können die Nachricht an mehrere Verbraucher in Form von Sendungen übermitteln.
Was zu tun? Routing
Fügen Sie in diesem Tutorial eine neue Funktion hinzu, in der wir nur einen Teil der Nachricht abonnieren können. Zum Beispiel werden nur die Farben, an denen wir interessiert sind ("Orange", "Schwarz", "Grün"), angeschlossen und alle Nachrichten werden auf der Konsole gedruckt.
Binden
Ein Schalter und eine Warteschlange sind eine Bindungsbeziehung. Ein einfaches Verständnis ist, dass die Warteschlange an den Informationen aus diesem Austausch interessiert ist.
Die Bindung kann mit einem zusätzlichen Parameter RoutingKey hinzugefügt werden. Spring-AMQP verwendet eine einfache und leicht verständliche API (Builder-Modus), um die Beziehung zwischen ihnen sehr klar zu machen. Setzen Sie den Schalter und die Warteschlange in den BindingBuilder und das Binden der Warteschlange mit dem Routing -Schlüssel (RoutingKey) einfach an den Switch.
@BeanPublic Binding Binding0A (DirectExchange DirectExchange, Queue autodeletequeue0) {return bindingBuilder.bind (autodeletequeue0) .to (DirectExchange) .With ("Orange");}Dies bedeutet, dass der Bindungsschlüssel vom Switch -Typ abhängt und der Fanout -Switch dies nicht ohne Optionen tun kann, die gebunden werden können.
Direkter Verbindungsschalter
Im vorherigen Tutorial wurde unser Messaging -System an alle Verbraucher in Form von Sendung geliefert. Wir möchten die Funktionen erweitern, um Filter basierend auf Farbtypen zu enthalten. Zum Beispiel möchten wir, dass ein Programm detaillierte Fehlermeldungen erhält und sie als Protokoll auf die Festplatte schreibt, ohne Informationen oder Warnprotokolle zu erhalten.
Drei Routingschlüssel: Orange, Schwarz und Grün
Wie in der obigen Abbildung gezeigt, gibt es 2 Warteschlangen, die an den Direktverbindungsaustausch x gebunden sind. Die erste Warteschlange verwendet die Routing -Tasten ist orange und die zweite hat 2 Routing -Tasten, schwarz und grün.
In dieser Einstellung wird die Nachricht in die Warteschlange Q1 in die Warteschlange gestellt, wenn eine Meldung mit der Routing -Taste auf den Switch gedrückt wird. Wenn die von der Nachricht verwendete Routing -Taste schwarz oder grün ist, wird er in Q2 weitergeleitet. Die verbleibenden Nachrichten, die den Routing -Schlüssel nicht verwenden, werden verworfen.
Parallele Bindung
Parallele Bindung
Dies kann ähnliche Funktionen wie Fanout -Switches implementieren.
Schauen Sie sich fast den Code an
Config.java
paket com.zb.rabbitmqtest.t4routing.config; import org.springframework.amqp.core. "T4Config") öffentliche Klasse config {/*** Erstellt von: Zhang Bo* Zeit: 2018/3/5 10:45 Uhr* @apinote Define Direct Connected Exchange*/@Bean publicExchange directExchange () {return New DirectExchange ("Direct-exchange"); }/*** Ersteller: Zhang bo* Zeit: 2018/3/5 10:48 Uhr* @APinote Definition, um die anonyme Warteschlange automatisch zu löschen. }/*** Ersteller: Zhang bo* Zeit: 2018/3/5 10:48 Uhr* @APinote Definition, um die anonyme Warteschlange automatisch zu löschen } /** * 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"); }/*** Erstellt von: Zhang bo* Zeit: 2018/3/5 10:48 AM* @param DirectExChange DirectExchange* @param autodeletequeue0 automatisch Löschen der Warteschlange* @apinote Bindung mit der Routing -Tastatur Black Queue an die Direct -Switch* @return Binding*/@Bean Public Binding Binding () {@Bean öffentlich Binding Binding -Binding -Binding -Binding -Binding -Binding -Binding () | return bindingBuilder.bind (autodeletequeue0) .to (DirectExchange). -with ("schwarz"); }/*** Erstellt von: Zhang bo* Zeit: 2018/3/5 10:48 AM* @param DirectExChange DirectExchange* @param autodeletequeue1 automatisch Löschen von Warteschlangen* @APinote -Bindung mit der Autodeletequeue1 -Warteschlange mit der Routing -Taste Directing -Switch -Switch* @return directiving binding binding binding binding binding binding binding binding binding binding binding binding binding binding binding binding binding binding binding binding binding1a ( autodeletequeue1) {return bindingBuilder.bind (autodeletequeue1) .to (DirectExchange) .With ("schwarz"); }/*** Erstellt von: Zhang bo* Zeit: 2018/3/5 10:48 AM* @param DirectExChange DirectExchange* @param autodeletequeue1 automatisch löschen Warteschlangen* @apinote Bindung mit der Routing -Tastatur -Queue -Warteschlange* @return Bindung return bindingBuilder.bind (autodeletequeue1) .to (DirectExchange). -with ("grün"); }} Receiver.java
paket com.zb.rabbitmqtest.t4routing.receiver; import org.springframework.amqp.rabbit.Annotation.rabbitListener; @RabbitListener (queues = "#{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; import org.springframework.amqp.core.directExchange; import org.springframework.amqp.rabbit.core.rabbittemplate; import org. org.springframework.stereotype.comPonent;/** * @Author Zhang bo 【[email protected]】 */ @component (value = "t4Send") öffentliche Klasse Senden {@autowired privatexchange directExchange; @Autowired Private Rabbittemplate Rabbittemplate; private string [] keys = {"orange", "schwarz", "grün"}; public void send () {String message = "hahaha"; für (int i = 0; i <5; i ++) {system.out.println ("Senden +++++++++++:". concat (message)); Rabbittemplate.ConvertandSend (DirectExchange.getName (), Keys [2], Nachricht); }}}
Sendest.java
paket com.zb.rabbitmqtest.t4routing.send; import org.junit.test; import org.junit.runner.runwith; import org.springFramework org.springframework.test.context.junit4.springrunner;/*** @Author Zhang bo*/ @runwith(springrunner.class)@springBoottestpublic Class Sendest {@autowired privat send; @Test public void send () löst Ausnahme aus {send.send (); }} Testergebnisse: Wenn es Schlüssel [0] ist, gibt es nur Empfänger0. Wenn es sich um Schlüsseln [1] handelt, ähnelt es dem Sendung mit Empfang0 und Empfang1. Wenn es Schlüssel [2] ist, gibt es nur Empfang1.
Wenn Schlüssel [0]
Senden +++++++++++++++: hahaha
Senden +++++++++++++++: hahaha
Senden +++++++++++++++: hahaha
Senden +++++++++++++++: hahaha
Senden +++++++++++++++: hahaha
Receiver0 ++++++++++++++: hahahaha
Receiver0 ++++++++++++++: hahahaha
Receiver0 ++++++++++++++: hahahaha
Receiver0 ++++++++++++++: hahahaha
Receiver0 ++++++++++++++: hahahahaWenn Schlüssel [1]
Senden +++++++++++++++: hahaha
Senden +++++++++++++++: hahaha
Senden +++++++++++++++: hahaha
Senden +++++++++++++++: hahaha
Senden +++++++++++++++: hahaha
Receiver1 ++++++++++++++: hahahaha
Receiver1 ++++++++++++++: hahahaha
Receiver0 ++++++++++++++: hahahaha
Receiver0 ++++++++++++++: hahahaha
Receiver0 ++++++++++++++: hahahaha
Receiver1 ++++++++++++++: hahahaha
Receiver1 ++++++++++++++: hahahaha
Receiver0 ++++++++++++++: hahahaha
Receiver1 ++++++++++++++: hahahaha
Receiver0 ++++++++++++++: hahahahaWenn Schlüssel [2]
Senden +++++++++++++++: hahaha
Senden +++++++++++++++: hahaha
Senden +++++++++++++++: hahaha
Senden +++++++++++++++: hahaha
Senden +++++++++++++++: hahaha
Receiver1 ++++++++++++++: hahahaha
Receiver1 ++++++++++++++: hahahaha
Receiver1 ++++++++++++++: hahahaha
Receiver1 ++++++++++++++: hahahaha
Receiver1 ++++++++++++++: hahahaha
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.