Dans le tutoriel précédent, nous avons créé un commutateur Fanout. Nous pouvons transmettre le message à plusieurs consommateurs sous forme de diffusion.
Ce qu'il faut faire? Routage
Dans ce didacticiel, ajoutez une nouvelle fonctionnalité où nous ne pouvons souscrire qu'une partie du message. Par exemple, seules les couleurs qui nous intéressent ("orange", "noir", "vert") seront connectées et tous les messages seront imprimés sur la console.
Lier
Un commutateur et une file d'attente sont une relation de liaison. Une compréhension simple est que la file d'attente s'intéresse aux informations de cet échange.
La liaison peut être ajoutée avec un paramètre supplémentaire RoutingKey. Spring-AMQP utilise une API simple et facile à comprendre (mode Builder) pour rendre la relation entre elles très claire. Mettre le commutateur et la file d'attente dans le BindingBuilder et la liaison de la file d'attente à l'interrupteur avec la touche de routage (RoutingKey).
@BeanPublic Binding Binding0a (DirectExChange DirectExchange, file d'attente Autodeleteeue0) {return binkingBuilder.bind (autodeleteeue0) .to (direxchange) .with ("orange");}Cela signifie que la touche de liaison dépend du type de commutateur et que le commutateur de fanout ne peut pas le faire sans options qui peuvent être liées.
Commutateur de connexion directe
Dans le tutoriel précédent, notre système de messagerie a été livré à tous les consommateurs sous forme de diffusion. Nous voulons développer des fonctionnalités pour inclure des filtres en fonction des types de couleurs. Par exemple, nous voulons qu'un programme reçoive des messages d'erreur détaillés et les rédige sur le disque dur en journal, sans recevoir d'informations ni de journaux d'avertissement.
Trois touches de routage: orange, noir et vert
Comme le montre la figure ci-dessus, il y a 2 files d'attente liées à l'échange de connexion directe x. La première file d'attente utilise les touches de routage est orange, et la seconde a 2 touches de routage, noires et vertes.
Dans ce paramètre, lorsqu'un message utilisant la touche de routage est poussé vers le commutateur, le message sera acheminé vers la file d'attente Q1. Lorsque la clé de routage utilisée par le message est noire ou verte, elle sera acheminée vers Q2. Les messages restants qui n'utilisent pas la touche de routage seront jetés.
Reliure parallèle
Reliure parallèle
Cela peut implémenter des fonctions similaires aux commutateurs de fanout.
Presque, regardez le code
Config.java
package com.zb.rabbitmqtest.t4routing.config; import org.springframework.amqp.core. *; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; / ** * @Autor Zhang Bo * / @ @ configuration = "t4config") Config {/ ** * créé par: zhang bo * time: 2018/3/5 10:45 am * @apinote define Direct-Connected Exchange * / @bean public DirexChange DirexChange () {return new Direxchange ("Direct-Exchange"); } / ** * Créateur: Zhang Bo * Temps: 2018/3/5 10:48 AM * @APinote Définition pour supprimer automatiquement la file d'attente anonyme * / @Bean Public Queue Autodeleteeue0 () {return new anonymousqueue (); } / ** * Créateur: Zhang Bo * Temps: 2018/3/5 10:48 AM * @APinote Définition pour supprimer automatiquement la file d'attente anonyme * / @Bean Public Queue Autodeleteeue1 () {return new anonymousqueue (); } / ** * Créé par: Zhang Bo * Heure: 2018/3/5 10:48 AM * @param DirexChange Commutateur connecté direct * @Param Autodeleteeue0 Supprimer automatiquement la file d'attente * @Apinote Binding Using the Routing Key Orange Libing0a (Direct-Connected Switch * @Return Binding * / @Bean Public Binding0a (DirectExchange Direxchange, AutoDelle0) {return bindingBuilder.bind (autodeleteeue0) .to (direxchange) .with ("orange"); } / ** * Créé par: Zhang Bo * Heure: 2018/3/5 10:48 AM * @param DirexChange DirexChange * @param AutoDeletequeUe0 Deleted Dilue * @Apinote Binding Utilisation de la touche de routage Black Fitre à l'interrupteur direct * @Return Binding * / @Bean Public Binding Binding0b (DiretexChange DirectExChat BindingBuilder.bind (Autodeleteeue0) .to (DirectExchange) .With ("Black"); } / ** * Créé par: Zhang Bo * Temps: 2018/3/5 10:48 AM * @param Direxchange Direxchange * @param AutoDeleteeue1 Supprimer automatiquement la file d'attente * @apinote Binding Utilisation de la mise en place Autodeleteeue1 avec la clé de routage Black vers le commutateur direct * @Return Binding * / @Bean Public Binding Binding1a (DirexChange DireadExchange, Binding * / @Bean Public Binding Binding1a (DirexChange DireadExchange, Binding * / @Bean Public Binding Binding1a (DirexChange DireadExchange, Binding * / @Bean Public Binding Binding1a (DirexChange DireadExchange, Binding * / @Bean Public Binding Binding1a (Direxchange autodeleteeue1) {return bindingBuilder.bind (autodeleteeue1) .to (DirectExchange) .with ("noir"); } / ** * Créé par: Zhang Bo * Temps: 2018/3/5 10:48 AM * @param DirexChange DirexChange * @param AutoDeletequeue1 Deleted Dilue * @apinote Binding Utilisation de la touche de routage Green Fitre à l'interrupteur direct * @return Binding * / @Bean Public Binding1b (DiretexChange DirectExchange, queue Autodelete1) BindingBuilder.Bind (AutodeleteQueue1) .to (DirectExchange) .With ("Green"); }} Récepteur.java
package com.zb.rabbitmqtest.t4routing.receiver; import org.springframework.amqp.rabbit.annotation.rabbitListener; import org.springframework.Stereotype.Component; / ** * @author zhang bo * / @ composant (valeur = "t4receiver") "# {autodeleteeue0.name}") public void receiver0 (string str) {System.out.println ("receiver0 ++++++++++:" + str); } @RabbitListener (que les queues = "# {autodeleteeue1.name}") public void receiver1 (string str) {System.out.println ("receiver1 +++++++++++:" + str); }} Send.java
package com.zb.rabbitmqtest.t4routing.send; import org.springframework.amqp.core.directExchange; import org.springframework.amqp.rabbit.core.rabbittemlate; import org.springframework.beans.factory.annotation.autowired; import; org.springframework.sterreoType.Component; / ** * @author zhang bo 【[email protected]】 * / @ composant (valeur = "t4Send") classe publique Envoyer {@Autowired Private DirexChange DirectExchange; @Autowired Private RabbitTemplate RabbitTemplate; String privé [] keys = {"orange", "noir", "vert"}; public void Send () {String Message = "hahaha"; pour (int i = 0; i <5; i ++) {System.out.println ("Send +++++++++++++:". Concat (message)); RabbitTemplate.ConvertandSend (DirectExChange.getName (), Keys [2], message); }}}
Sendtest.java
package com.zb.rabbitmqtest.t4routing.send; import org.junit.test; import org.junit.runner.runwith; import org.springframework.beans.factory.annotation.autowired; import org.springframework.boot.test.context.springboottest; org.springframework.test.context.junit4.springrunner; / ** * @author zhang bo * / @ runwith(springrunner.class)@springboottestpublic class SendTest {@autowired private Send; @Test public void Send () lève une exception {Send.Send (); }} Résultats du test: s'il s'agit de clés [0], il n'y a que le récepteur0. S'il s'agit de clés [1], il est similaire à Broadcast, avec Recea0 et Recee1. Si ce sont des clés [2], il n'y a que des recettes.
Quand les touches [0]
Envoyer ++++++++++++++++: hahaha
Envoyer ++++++++++++++++: hahaha
Envoyer ++++++++++++++++: hahaha
Envoyer ++++++++++++++++: hahaha
Envoyer ++++++++++++++++: hahaha
récepteur0 ++++++++++++++++: hahahaha
récepteur0 ++++++++++++++++: hahahaha
récepteur0 ++++++++++++++++: hahahaha
récepteur0 ++++++++++++++++: hahahaha
récepteur0 ++++++++++++++++: hahahahaQuand les clés [1]
Envoyer ++++++++++++++++: hahaha
Envoyer ++++++++++++++++: hahaha
Envoyer ++++++++++++++++: hahaha
Envoyer ++++++++++++++++: hahaha
Envoyer ++++++++++++++++: hahaha
récepteur1 ++++++++++++++++: hahahaha
récepteur1 ++++++++++++++++: hahahaha
récepteur0 ++++++++++++++++: hahahaha
récepteur0 ++++++++++++++++: hahahaha
récepteur0 ++++++++++++++++: hahahaha
récepteur1 ++++++++++++++++: hahahaha
récepteur1 ++++++++++++++++: hahahaha
récepteur0 ++++++++++++++++: hahahaha
récepteur1 ++++++++++++++++: hahahaha
récepteur0 ++++++++++++++++: hahahahaQuand les clés [2]
Envoyer ++++++++++++++++: hahaha
Envoyer ++++++++++++++++: hahaha
Envoyer ++++++++++++++++: hahaha
Envoyer ++++++++++++++++: hahaha
Envoyer ++++++++++++++++: hahaha
récepteur1 ++++++++++++++++: hahahaha
récepteur1 ++++++++++++++++: hahahaha
récepteur1 ++++++++++++++++: hahahaha
récepteur1 ++++++++++++++++: hahahaha
récepteur1 ++++++++++++++++: hahahaha
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.