首页 > 其他分享 >RabbitMQ 09 主题模式

RabbitMQ 09 主题模式

时间:2023-04-05 16:25:47浏览次数:49  
标签:主题 amqp 队列 09 springframework 交换机 RabbitMQ org import

主题模式

主题模式结构图:

主题模式实际上就是一种模糊匹配的模式,可以将routingKey以模糊匹配的方式去进行转发。

可以使用*#来表示:

  • *:任意的一个单词。
  • #:0个或多个单词。
  1. 定义配置类。

    import org.springframework.amqp.core.Binding;
    import org.springframework.amqp.core.BindingBuilder;
    import org.springframework.amqp.core.Exchange;
    import org.springframework.amqp.core.ExchangeBuilder;
    import org.springframework.amqp.core.Queue;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * RabbitMQ配置类
     */
    @Configuration
    public class RabbitMqConfig {
        
        /**
         * 定义交换机,可以很多个
         * @return 交换机对象
         */
        @Bean
        public Exchange topicExchange(){
            return ExchangeBuilder.topicExchange("amq.topic").build();
        }
    
        /**
         * 定义消息队列
         * @return 消息队列对象
         */
        @Bean
        public Queue topicQueue(){
            return new Queue("topicQueue");
        }
        
        /**
         * 定义绑定关系
         * @return 绑定关系
         */
        @Bean
        public Binding binding(@Qualifier("topicExchange") Exchange exchange,
                               @Qualifier("topicQueue") Queue queue){
            // 将定义的交换机和队列进行绑定
            return BindingBuilder
                    // 绑定队列
                    .bind(queue)
                    // 到交换机
                    .to(exchange)
                    // 使用自定义的routingKey
                    .with("*.test.#")
                    // 不设置参数
                    .noargs();
        }
    }
    
  2. 定义消费者。

    import org.springframework.amqp.rabbit.annotation.Queue;
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    
    /**
     * 主题队列监听器
     */
    @Component
    public class TopicListener {
    
        /**
         * 监听主题队列消息
         */
        @RabbitListener(queuesToDeclare = {@Queue("topicQueue")})
        public void receiver(String message) {
            System.out.println("主题队列接收到消息:" + message);
        }
        
    }
    
  3. 定义生产者。

    import org.junit.jupiter.api.Test;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    @SpringBootTest
    class RabbitMqSpringBootTests {
    
        /**
         * RabbitTemplate封装了大量的RabbitMQ操作,已经由Starter提供,因此直接注入使用即可
         */
        @Autowired
        private RabbitTemplate rabbitTemplate;
    
        /**
         * 生产者
         */
        @Test
        void producer()  {
    
            rabbitTemplate.convertAndSend("amq.topic", "test.1", "Hello World 1");
            rabbitTemplate.convertAndSend("amq.topic", "1.test", "Hello World 2");
            rabbitTemplate.convertAndSend("amq.topic", "1.test.1", "Hello World 3");
        }
    
    }
    
  4. 启动服务。

    此时队列已创建。

    绑定关系已设置。

    启动生产者,发送消息。

    可以看到,第一条消息的routingKey(test.1)由于不匹配*.test.#而没有被队列接收到。

除了这里使用的默认主题交换机之外,还有一个叫做amq.rabbitmq.trace的交换机:

这是用于帮助记录和追踪生产者和消费者使用消息队列的交换机,它是一个内部的交换机,这里就不演示了。


标签:主题,amqp,队列,09,springframework,交换机,RabbitMQ,org,import
From: https://www.cnblogs.com/codesail/p/17289632.html

相关文章

  • 博客园主题美化配置(Awescnb)
    平时比较喜欢捣鼓主题,但是没办法见一个爱一个,或者有时候就一个主题用腻了,想尝试另一个主题,此处记录下是为了切换是更快的还原当初的配置,同时可以给广大网友提供参考~当前主题为awescnb系列主题中的geek主题 Awescnb文档Awescnb作者博客配置步骤一、准备工作申请js......
  • HDOJ2091 空心三角形
    空心三角形TimeLimit:1000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):49528    AcceptedSubmission(s):13429ProblemDescription把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效......
  • origin迁移用户主题和模板
    1、用户自定义的文件位于:C:\Users\******\Documents\OriginLab\UserFiles我们拷贝这个文件夹到新的电脑上替换UserFiles文件夹即可2、替换完成后,主题一般会自动更新,但是绘图模板需要手动添加进去。       3、origin的使用套路一般是,先创建模板,然后创建主题,后面......
  • P3886 [JLOI2009]神秘的生物
    第一次接触连通块的插头dp用最小表示法表示每个连通块,由于数据范围知道连通块最多为5个,所以用8进制即可状态转移照模板推一推需要注意的是对于上面来的连通块如果不连通的话需要考虑其是否还有其它地方与下方相连,如果没有则必须在此点往下相连,否则上方那个连通块将被孤立,不符合......
  • GEOM30009 图像环境
    GEOM30009IMAGINGTHEENVIRONMENTGroupAssignment2AssessingBurnScarsUsingSatelliteImageryDueforsubmissionat11:55pmonFridayofWeek6Value:15%ofSubjectMarkObjectiveTheaimofthisassignmentistolearnhowtoassessbushfireburnscar......
  • 它把RabbitMQ的复杂全屏蔽了,我朋友用它后被老板一夜提拔为.NET架构师
    它把RabbitMQ的复杂全屏蔽了,我朋友用它后被老板一夜提拔为.NET架构师 本文技术源自外企,并已在多个世界500强大型项目开发中运用。本文适合有初/中级.NET知识的同学阅读。(支持.NET/.NETFramework/.NETCore) RabbitMQ作为一款主流的消息队列工具早已广受欢迎。相比于其......
  • 一个非常简单用.NET操作RabbitMQ的方法
    一个非常简单用.NET操作RabbitMQ的方法 RabbitMQ作为一款主流的消息队列工具早已广受欢迎。相比于其它的MQ工具,RabbitMQ支持的语言更多、功能更完善。 本文提供一种市面上最/极简单的使用RabbitMQ的方式(支持.NET/.NETFramework/.NETCore),只需要会调用以下三个方法,你就几......
  • WT3209锂电同步升12V1A
       WT3209是一款高功率密度的全集成BOOST升压转换器,内部集成的功率MOSFET管导通电阻为上管13mΩ和下管11mΩ。可为便携式系统提供空间小尺寸解决方案。WT3209具有2.7V至12V的宽输入电压范围,应用在单节或两节锂电池的便携电子产品中。该转器件具备10A开关电流能力,并且能......
  • RabbitMQ 08 路由模式
    路由模式路由模式结构图:定义配置类。importorg.springframework.amqp.core.Binding;importorg.springframework.amqp.core.BindingBuilder;importorg.springframework.amqp.core.Exchange;importorg.springframework.amqp.core.ExchangeBuilder;importorg.springfr......
  • FIT5094 IT for Management Decision Making
    FIT5094ITforManagementDecisionMakingSemester1,2023Assignment1–AnalysisofaStrategicDecisionFormat:IndividualReportWeight:25%ofthemarksavailableforFIT5094IndicativeLength:2,500–3,000wordsDuedate:ThursdayApril6,2023@4:30......