消息队列之RabbitMQ之主题(Topics)模式

简介: RabbitMQ是一个消息中间件,它接受并转发消息。它有6中工作模式,而主题模式是它的核心。在主题模式中,主要是通配符的添加与使用。

前言:RabbitMQ是一个消息中间件:它接受并转发消息。相当于一个快递站,只存放消息。快递员分配东西到快递站,相当于生产者生产消息到MQ中,买家从快递站拿快递,相当于消费者从MQ中取出消息。RabbitMQ与快递站的主要区别在于,它不处理快件而是接收、存储和转发消息数据,在RabbitMQ的六种工作模式中,最常用的为主题(Topics)模式。下面我们来具体介绍一下RabbitMQ的主题(Topics)工作模式。

1.首先在生产者项目的配置文件application.yml中进行RabbitMQ的的相关配置。

image.png

2.新建RabbitmqConfig文件进行创建交换机,队列,队列绑定交换机,其中,在队列绑定交换机的中with属性即是设置路由键,该路由键(routingkey)可以任意设置一个字符串。此处即是主题模式与其他工作模式的主要区别。若有多个队列,路由键即是区分不同的队列的。这样就完成了队列的创建与绑定。


注意:


通配符规则:


①消息设置routingkey时,routingkey可以由多个单词构成,中间以.分割


②队列设置routingkey时,#可以匹配任意多个单词,*可以匹配任意一个单词

packagecom.study.rabbitmq;
importorg.springframework.amqp.core.*;
importorg.springframework.beans.factory.annotation.Qualifier;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
/*** RabbitMQ配置文件*/@ConfigurationpublicclassRabbitmqConfig {
privatefinalStringEXCHANGE_NAME="boot_topic_exchange";
privatefinalStringQUEUE_NAME="boot_queue";
//创建交换机@Bean("bootExchange")
publicExchangegetExchange(){
returnExchangeBuilder                .topicExchange(EXCHANGE_NAME)//交换机类型                .durable(true)//是否持久化                .build();
    }
//创建队列@Bean("bootQueue")
publicQueuegetMessageQueue(){
// return new Queue(QUEUE_NAME);    }
//交换机绑定队列@BeanpublicBindingbindMessageQueue(@Qualifier("bootExchange") Exchangeexchange, 
@Qualifier("bootQueue") Queuequeue){
returnBindingBuilder            .bind(queue)
            .to(exchange)
            .with("#.message.#")
            .noargs();
    }
}

3.创建测试类,进行消息发送。发送消息调用RabbitTemplate的内部方法convertAndSend,该方法有三个参数,第一个参数对应的是交换机名称,第二个参数对应的为路由键,即是在队列绑定交换机是with属性中定义的字符串,第三个参数为发送的消息内容。运行该方法,消息内容发送完毕。

packagecom.study.rabbitmq;
importorg.junit.jupiter.api.Test;
importorg.springframework.amqp.rabbit.core.RabbitTemplate;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.boot.test.context.SpringBootTest;
@SpringBootTestpublicclassTestProducer {
//注入RabbitTemplate工具类@AutowiredprivateRabbitTemplaterabbitTemplate;
@TestpublicvoidtestSendMessage() {
rabbitTemplate.setConfirmCallback(newRabbitTemplate.ConfirmCallback() {
/*** 发送消息* 参数1 :交换机* 参数2:路由key* 参数3:要发送的消息* */rabbitTemplate.convertAndSend("boot_topic_exchange", "message", "测试发送消息");
    }

4.监听消息,并进行消息的接收与处理。同样的,在消费者项目中也要在application.yml中进行RabbitMQ的相关配置。编写消费者测试类。代码如下:


其中@RabbitListener注解声明要监听的队列名"boot_queue",队列名是在创建队列时定义的。参数message即为该队列中的消息。

packagecom.study.rabbitmq1.Consumer;
importcom.rabbitmq.client.Channel;
importorg.springframework.amqp.rabbit.annotation.RabbitListener;
importorg.springframework.stereotype.Component;
importjava.io.IOException;
//消费者@ComponentpublicclassConsumer {
//监听列队@RabbitListener(queues="boot_queue")
publicvoidlistenMessage(Messagemessage, Channelchannel)  {
inti=1/0;//模拟处理消息出现的bugSystem.out.println("接受消息:"+message.getBody());
    }
}

以上就是RabbitMQ的主题工作模式的基本使用过程。

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
5月前
|
消息中间件 数据管理 Serverless
阿里云消息队列 Apache RocketMQ 创新论文入选顶会 ACM FSE 2025
阿里云消息团队基于 Apache RocketMQ 构建 Serverless 消息系统,适配多种主流消息协议(如 RabbitMQ、MQTT 和 Kafka),成功解决了传统中间件在可伸缩性、成本及元数据管理等方面的难题,并据此实现 ApsaraMQ 全系列产品 Serverless 化,助力企业提效降本。
|
3月前
|
消息中间件 Java Kafka
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
本文深入解析了 Kafka 和 RabbitMQ 两大主流消息队列在 Spring 微服务中的应用与对比。内容涵盖消息队列的基本原理、Kafka 与 RabbitMQ 的核心概念、各自优势及典型用例,并结合 Spring 生态的集成方式,帮助开发者根据实际需求选择合适的消息中间件,提升系统解耦、可扩展性与可靠性。
222 1
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
848 94
|
消息中间件 安全 Java
云消息队列RabbitMQ实践解决方案评测
一文带你详细了解云消息队列RabbitMQ实践的解决方案优与劣
364 101
|
12月前
|
消息中间件 网络协议 RocketMQ
RocketMQ Controller 模式 始终更新成本机ip
ontrollerAddr=192.168.24.241:8878 但是日志输出Update controller leader address to 127.0.0.1:8878。导致访问失败
245 3
|
消息中间件 存储 Kafka
MQ 消息队列核心原理,12 条最全面总结!
本文总结了消息队列的12个核心原理,涵盖消息顺序性、ACK机制、持久化及高可用性等内容。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
消息中间件
解决方案 | 云消息队列RabbitMQ实践获奖名单公布!
云消息队列RabbitMQ实践获奖名单公布!
202 1
|
消息中间件 存储 弹性计算
云消息队列RabbitMQ实践
云消息队列RabbitMQ实践
|
消息中间件 C语言 RocketMQ
消息队列 MQ操作报错合集之出现"Connection reset by peer"的错误,该如何处理
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
消息中间件 运维 监控
云消息队列RabbitMQ实践解决方案评测报告
本报告旨在对《云消息队列RabbitMQ实践》解决方案进行综合评测。通过对该方案的原理理解、部署体验、设计验证以及实际应用价值等方面进行全面分析,为用户提供详尽的反馈与建议。
269 16