В предыдущей статье мы реализовали гибкую конфигурацию системы сообщений. Вместо использования конфигурации переключателя вентилятора. Используйте прямые коммутаторы и имейте возможность избирательно принимать сообщения после ключей маршрутизации.
Хотя использование коммутаторов прямого подключения может улучшить нашу систему, он все еще имеет ограничения и не может реализовать несколько условий маршрутизации.
В нашей системе обмена сообщениями мы хотим подписаться не только на очередь на основе ключей, но и на источник на основе производственных сообщений. Эти концепции поступают из Syslog Unix Tool. Этот журнал основан на строгих (Info/Warn/Crit ...) и Easy (Auth/Cron/Kern ...) Методы маршрутизации. Наш пример проще этого.
Этот пример даст нам большую гибкость, например, мы хотим прослушать как журналы ошибок, так и все журналы из «Kern».
Чтобы достичь этой гибкости, нам нужно узнать больше о переключателях тем.
Тема -переключатель
При использовании переключателя темы вы не можете использовать произвольные клавиши маршрутизации. Формат ключа маршрутизации должен быть словами, разделенными на точки. Любое слово, которое вы используете, обычно может выразить значение. Например, "stock.usd.nyse", "nyse.vmw", "Quick.orange.rabbit". Но размер слова ограничен максимум 255 байтов.
Используйте переключатель темы, чтобы определить клавиши маршрутизации, чтобы обратить внимание на 2 балла
Определите клавиши маршрутизации, которые соответствуют переключению темы
В этом примере мы отправим все сообщения, описывающие животное. Это сообщение будет отправлено вместе с ключом маршрутизации, состоящей из 3 слов и 2 баллов. Первое слово - выразить скорость, второе описывает цвет, а третье описывает тип: «<sode>. <Цвет>. <sipes>».
Создайте три типа привязки, Q1 и ключ «*. Оранг.
Обзор трех связующих отношений:
Сообщение с ключом маршрутизации, установленным в «Quick.orange.rabbit», будет передано в очереди Q1 и Q2. То же самое касается "lazy.orange.elephant" тоже. «Quick.orange.fox» пойдет в первую очередь, «Lazy.Brown.fox» пойдет во вторую очередь, а «Lazy.pink.rabbit» вовремя пойдет во вторую очередь. Это соответствует 2 привязки. «Quick.rown.fox» будет отброшен из -за несоответствия.
Так что насчет "Orange" и "Quick.orange.male.rabbit"? Поскольку привязка не соответствует, оно будет отброшено.
Так что насчет ключей маршрутизации "lazy.orange.male.rabbit"? , поскольку ленивый.# Матчи это будет передано во вторую очередь.
Советы по тематическим обменникам
Переключатель темы потрясающий и действует похожи на другие переключатели.
Пример кода
Код ничем не отличается от предыдущего кода маршрутизации, см.
Config.java
Пакет com.zb.rabbitmqtest.t5topics.config; import org.springframework.amqp.core.*; import org.springframework.context.annotation.bean; импорт org.springframework.context.annotation.configuration;/** @author zhang zhang zhang zhang gaincygure; Config {/*** Создано: Zhang Bo* Время: 2018/3/5 10:45 AM* @Apinote Определите обмен темами*/@Bean public tapicexchange tapicexchange () {return new tapicexchange ("topic-exchange"); }/**. }/**. }/*** Создано: Zhang Bo* Время: 2018/3/5 10:48 AM* @param TapexChange Switch* @param autodeleteQueue0 Автоматически удалять очередь* @apinote Переплет используйте ключ маршрутизации оранжевого цвета для очереди с переключателем темы* @retun AutoDeleteQueue0) {return BidingBuilder.Bind (AutoDeleTequeQue0) .to (tapicexChange). With ("*. Orange.*"); }/*** Создано: Zhang Bo* Время: 2018/3/5 10:48 AM* @param TapexChange Switch* @param autodeletequeue1 Автоматически удаление очереди* @apinote с использованием AutodeleteQueue1 с ключевым ключом к черному с переключателем* @return Binding. AutoDeleTequeue1) {return BindingBuilder.Bind (AutoDeleTequeue1) .to (tapicexchange). with ("*.*. Rabbit"); } /** * Created by: Zhang Bo* Time: 2018/3/5 10:48 am * @param topicExchange Theme Switch* @param autoDeleteQueue1 Automatically delete the queue* @apiNote Binding Use the routing key green to queue to the topic switch* @return Binding */ @Bean public Binding binding1b(TopicExchange topicExchange, Queue AutoDeletequeue1) {return bidingbuilder.bind (autodeletequeue1) .to (tapicexchange). with ("Lazy.#"); }} Приемник. Ява
Пакет com.zb.rabbitmqtest.t5topics.receiver; import org.springframework.amqp.rabbit.annotation.rabbitlistener; импорт org.springframework.steolotype.compentin = "#{autoDeleteQueue0.name}") public void -приемник (string str) {System.out.println ("Receiver0 +++++++++++:"+str); // try {// thread.sleep (1000); //} catch (прерывание Exception e) {// e.printstacktrace (); //}} @RabbitListener (queues = "#{autoDeletequeue1.name}") public void -receiver1 (string str) {System.out.println ("Receiver1 ++++++++++:"+str); // try {// thread.sleep (1000); //} catch (прерывание Exception e) {// e.printstacktrace (); //}}} Send.java
пакет com.zb.rabbitmqtest.t5topics.send; import org.springframework.amqp.core.topicexchange; import org.springframework.amqp.rabbit.core.rabbittemplate; импорт org.spramework.beans.annotation. org.springframework.stereotype.component;/*** @author zhang bo*/ @component (value = "t5send") открытый класс Send {@autowired Private tapicexchange tapicexchange; @Autowired Private RabbitTemplate RabbitTemplate; частная строка [] keys = {"Quick.orange.rabbit", "lazy.orange.elephant", "Quick.orange.fox", "lazy.rown.fox", "lazy.pink.rabbit", "Quick.brown.fox"}; public void Send () {String message = "Hahaha"; for (int i = 0; i <5; i ++) {System.out.println ("Send +++++++++++++:". concat (message)); rabbittemplate.convertandsend (tapicexchange.getname (), keys [5], message); }}} SendTest.java
пакет com.zb.rabbitmqtest.t5topics.send; import org.junit.test; import org.junit.runner.runwith; import org.springframework.beans.factory.annotation.autowired; import org.spramework.boot.test.context.springboottest; org.springframework.test.context.junit4.springrunner;/*** @author zhang bo*/ @runwith(springrunner.class)@springboottestpublic class sendtest {@autowired private send send; @Test public void Send () Throws Exception {send.send (); }}Я не оставлю результаты теста, пожалуйста, проверьте это самостоятельно.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.