zoukankan      html  css  js  c++  java
  • rabbitmq工作模式(三)Topics通配符模式

    RabbitMQ的工作模式包括了:简单模式、工作队列模式、发布订阅模式、路由模式、TOPICS(通配符模式)以及RPC。本文主要介绍topics模式。

     如图,一个交换机可以绑定一个或多个队列,一个队列可以设定一个或多个带通配符的routingkey。生产者将消息发送给交换机,交换机根据routingKey的值来对队列进行匹配,匹配时采用通配符模式,匹配成功将消息发送到相关队列。

    springboot整合rabbitmq实现topics模式

    创建生产者

    (1)创建RabbitConfig类文件

    @Configuration
    public class RabbitConfig {
        @Bean("queueA")
        public Queue createQueueA(){
            return new Queue("queueA");
        }
        @Bean("queueB")
        public Queue createQueueB(){
            return new Queue("queueB");
        }
    
        @Bean("queueAll")
        public Queue createQueueAll(){
            return new Queue("queueAll");
        }
    
    
        @Bean("topicExchange")
        public TopicExchange createTopicExchange(){
            return new TopicExchange("topicExchange");
        }
        @Bean
        public Binding BindQueueA(@Qualifier("queueA")Queue queueA,@Qualifier("topicExchange") TopicExchange topicExchange ){
            return BindingBuilder.bind(queueA).to(topicExchange).with("queue.A");
        }
        @Bean
        public Binding BindQueueB(@Qualifier("queueB")Queue queueB,@Qualifier("topicExchange") TopicExchange topicExchange ){
            return BindingBuilder.bind(queueB).to(topicExchange).with("queue.B");
        }
        @Bean
        public Binding BindQueueAll(@Qualifier("queueAll")Queue queueAll,@Qualifier("topicExchange") TopicExchange topicExchange){
            return BindingBuilder.bind(queueAll).to(topicExchange).with("queue.*");
        }
    }

    (2)创建测试类,向队列发送信息

    @SpringBootTest
    class ProducerApplicationTests {
    
        @Autowired
        private RabbitTemplate rabbitTemplate;
        @Test
        void contextLoads() {
            rabbitTemplate.convertAndSend("topicExchange","queue.A","向QueueA中发送信息queue.A");
            rabbitTemplate.convertAndSend("topicExchange","queue.B","向QueueB中发送信息queue.B");
        }
    }

    创建消费者

    public class ConsumerA {
        @RabbitListener(queues = "queueA")
        @RabbitHandler
        public void receiveMessageA(String data){
            System.out.println("queueA:"+data);
        }
    
    
        @RabbitListener(queues = "queueB")
        @RabbitHandler
        public void receiveMessageB(String data){
            System.out.println("queueB:"+data);
        }
    }

    实验结果

    启动生产者,从rabbitmq管理界面查看queue信息,分别向queueA、queueB和queueAll中添加消息。

    启动消费者,信息消费成功。

  • 相关阅读:
    virtual方法和abstract方法的使用(轉載)
    C# 如何寫入cookie
    Literal的一般用法,与Label对比 MSDN上的解释
    With temp as---sql语句用法 转
    GridView __DataKey 使用
    .net里radiobutton 两个怎么才能让他只选择一个
    Server.Transfer()与Response.Redirect()区别
    OnInit 事件
    ajax中Sys.WebForms.PageRequestManager的事件激发顺序
    Linux CentOS 查看某个进程打开的文件(文件描述符)
  • 原文地址:https://www.cnblogs.com/menbo/p/13458265.html
Copyright © 2011-2022 走看看