消息队列之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版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
1天前
|
消息中间件 存储 Kafka
MQ 消息队列核心原理,12 条最全面总结!
本文总结了消息队列的12个核心原理,涵盖消息顺序性、ACK机制、持久化及高可用性等内容。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
5天前
|
消息中间件
解决方案 | 云消息队列RabbitMQ实践获奖名单公布!
云消息队列RabbitMQ实践获奖名单公布!
|
7天前
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
25 2
|
12天前
|
消息中间件 存储 弹性计算
云消息队列RabbitMQ实践
云消息队列RabbitMQ实践
|
15天前
|
消息中间件 安全 Java
云消息队列RabbitMQ实践解决方案评测
一文带你详细了解云消息队列RabbitMQ实践的解决方案优与劣
52 5
|
19天前
|
消息中间件 存储 监控
解决方案 | 云消息队列RabbitMQ实践
在实际业务中,网站因消息堆积和高流量脉冲导致系统故障。为解决这些问题,云消息队列 RabbitMQ 版提供高性能的消息处理和海量消息堆积能力,确保系统在流量高峰时仍能稳定运行。迁移前需进行技术能力和成本效益评估,包括功能、性能、限制值及费用等方面。迁移步骤包括元数据迁移、创建用户、网络打通和数据迁移。
59 4
|
2月前
|
消息中间件 监控 数据处理
解决方案 | 云消息队列RabbitMQ实践
解决方案 | 云消息队列RabbitMQ实践
45 1
|
27天前
|
消息中间件 监控 测试技术
云消息队列RabbitMQ实践 - 评测
根据反馈,对本解决方案的实践原理已有一定理解,描述整体清晰但需在消息队列配置与使用上增加更多示例和说明以助理解。部署体验中获得了一定的引导和文档支持,尽管文档仍有待完善;期间出现的配置文件错误及依赖库缺失等问题已通过查阅资料解决。设计验证展示了云消息队列RabbitMQ的核心优势,包括高可用性和灵活性,未来可通过增加自动化测试来提高系统稳定性。实践后,用户对方案解决问题的能力及适用场景有了明确认识,认为其具有实际生产价值,不过仍需在性能优化、安全性增强及监控功能上进行改进以适应高并发和大数据量环境。
38 0
|
4月前
|
消息中间件 C语言 RocketMQ
消息队列 MQ操作报错合集之出现"Connection reset by peer"的错误,该如何处理
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
4月前
|
消息中间件 Java C语言
消息队列 MQ使用问题之在使用C++客户端和GBase的ESQL进行编译时出现core dump,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。