前言:RabbitMQ是一个消息中间件:它接受并转发消息。相当于一个快递站,只存放消息。快递员分配东西到快递站,相当于生产者生产消息到MQ中,买家从快递站拿快递,相当于消费者从MQ中取出消息。RabbitMQ与快递站的主要区别在于,它不处理快件而是接收、存储和转发消息数据,在RabbitMQ的六种工作模式中,最常用的为主题(Topics)模式。下面我们来具体介绍一下RabbitMQ的主题(Topics)工作模式。
1.首先在生产者项目的配置文件application.yml中进行RabbitMQ的的相关配置。
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配置文件*/publicclassRabbitmqConfig { privatefinalStringEXCHANGE_NAME="boot_topic_exchange"; privatefinalStringQUEUE_NAME="boot_queue"; //创建交换机"bootExchange") (publicExchangegetExchange(){ returnExchangeBuilder .topicExchange(EXCHANGE_NAME)//交换机类型 .durable(true)//是否持久化 .build(); } //创建队列"bootQueue") (publicQueuegetMessageQueue(){ // return new Queue(QUEUE_NAME); } //交换机绑定队列publicBindingbindMessageQueue( ("bootExchange") Exchangeexchange, "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; publicclassTestProducer { //注入RabbitTemplate工具类privateRabbitTemplaterabbitTemplate; publicvoidtestSendMessage() { 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; //消费者publicclassConsumer { //监听列队queues="boot_queue") (publicvoidlistenMessage(Messagemessage, Channelchannel) { inti=1/0;//模拟处理消息出现的bugSystem.out.println("接受消息:"+message.getBody()); } }
以上就是RabbitMQ的主题工作模式的基本使用过程。