SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.24 SpringBoot 整合 RabbitMQ(topic 模式)
创始人
2024-02-08 23:42:56
0

SpringBoot

【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】

SpringBoot 开发实用篇

文章目录

      • SpringBoot
      • SpringBoot 开发实用篇
      • 5 整合第三方技术
        • 5.24 SpringBoot 整合 RabbitMQ(topic 模式)
          • 5.24.1 整合RabbitMQ 【topic 模式】
          • 5.24.2 小结

5 整合第三方技术

5.24 SpringBoot 整合 RabbitMQ(topic 模式)

5.24.1 整合RabbitMQ 【topic 模式】

之前我们已经使用直连交换机模式【direct 】

在这里插入图片描述

完成了消息队列的使用,现在来用一下另一种模式,主题交换机

直接把直连的代码复制一份

在这里插入图片描述

等修改完成后,笔者会给出所有的代码

消息服务实现类

package com.dingjiaxiong.service.impl.rabbitmq.topic;import com.dingjiaxiong.service.MessageService;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** ClassName: MessageServiceRabbitmqDirectImpl* date: 2022/10/22 21:25** @author DingJiaxiong*/@Service
public class MessageServiceRabbitmqTopicImpl implements MessageService {@Autowiredprivate AmqpTemplate amqpTemplate;@Overridepublic void sendMessage(String id) {System.out.println("待发送短信的订单已纳入处理队列(rabbitmq topic),id " + id);amqpTemplate.convertAndSend("topicExchange","topic.order.id",id);}@Overridepublic String doMessage() {return null;}
}

配置类

package com.dingjiaxiong.service.impl.rabbitmq.topic.config;import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** ClassName: RabbitConfigtopic* date: 2022/10/22 21:29** @author DingJiaxiong*/@Configuration
public class RabbitConfigTopic {//存储消息的消息队列的对象@Beanpublic Queue topicQueue(){return new Queue("topic_queue"); //是否持久化、是否连接专用、是否自动删除【后面其实有三个boolean参数,默认值是tff】}//还可以再来个队列,让它绑在同一个交换机上@Beanpublic Queue topicQueue2(){return new Queue("topic_queue2"); //是否持久化、是否连接专用、是否自动删除【后面其实有三个boolean参数,默认值是tff】}//消息队列不能直接使用,需要使用一个交换机去绑定它@Beanpublic TopicExchange topicExchange(){return new TopicExchange("topicExchange");}//做消息队列与交换机的绑定关系@Beanpublic Binding bindingTopic(){return BindingBuilder.bind(topicQueue()).to(topicExchange()).with("topic.order.id");}//做消息队列与交换机的绑定关系@Beanpublic Binding bindingTopic2(){return BindingBuilder.bind(topicQueue2()).to(topicExchange()).with("topic2");}}

两个监听器,删掉2,留一个

package com.dingjiaxiong.service.impl.rabbitmq.topic.listener;import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;/*** ClassName: MessageListener* date: 2022/10/22 21:40** @author DingJiaxiong*/@Component
public class MessageListener {//收一个消息@RabbitListener(queues = "topic_queue")public void receive(String id){System.out.println("已完成短信发送业务(rabbitmq topic 绑的1号消息队列),id:" + id);}//收一个消息@RabbitListener(queues = "topic_queue2")public void receive2(String id){System.out.println("已完成短信发送业务(rabbitmq topic 绑的2号消息队列),id:" + id);}}

然后把direct 那套处理一下,全部加载就乱套 了

在这里插入图片描述

四个文件全部把注解去掉

直接启动服务器,开始测试

在这里插入图片描述

生产三个

在这里插入图片描述

从结果中可以看到,都是1 消费 的

看看服务器

在这里插入图片描述

初始化了两个队列

现在有匹配规则要注意

在这里插入图片描述

在配置类中可以修改成模糊匹配

在这里插入图片描述

这样还是可以匹配上【如果改成topic.*.ids 就不能和后面的匹配上了】

这个和direct 就不同了,direct必须完全匹配,topic模糊匹配的话,就有了一个分发的功能

如果两个队列都能被匹配

在这里插入图片描述

先再服务器中把已有的队列删掉

在这里插入图片描述

OK,启动服务器进行测试

在这里插入图片描述

服务跑起来后,

看看服务器

在这里插入图片描述

两个队列也生成了

生产一个消息

在这里插入图片描述

效果很明显,两个队列都消费了消息,这说明我们的消息发到了两个队列里

【效果显著,topic 比 direct 直连强大】

回顾一下

  • 定义消息队列(topic)

在这里插入图片描述

  • 绑定键匹配规则
    • * (星号): 用来表示一个单词 ,且该单词是必须出现的
    • # (井号): 用来表示任意数量

在这里插入图片描述

  • 生产与消费消息(topic)

在这里插入图片描述

  • 使用消息监听器对消息队列监听(topic)

在这里插入图片描述

5.24.2 小结
  1. SpringBoot整合RabbitMQ主题交换机模式

相关内容

热门资讯

美文摘抄加赏析 有关美文摘抄加赏析  美文《法汉词典》译为“纯文学”,法文《拉鲁斯普通名词大词典》中的定义是:“文学...
在那遥远的小山村美文 在那遥远的小山村美文  一直想写一篇关于母亲生病的文章,只放在心里,没有动笔,今天看到我哥的博文,叹...
心里很累的心情说说 心里很累的心情说说(精选120句)  随着社交网络的兴起,越来越多人习惯于在朋友圈发布说说,用以记录...
好句好段摘抄 好句好段摘抄集锦  文字像精灵,只要你用好它,它就会产生让你意想不到的效果。所以无论我们说话还是作文...
经典拟人句摘抄 经典拟人句摘抄  拟人句就是把某件东西比喻成人的动作,所写事物必须具有人的特点;不能出现比喻词;不能...
经典爱情小说:《理智与情感》   《理智与情感》是创作了世界名著《傲慢与偏见》的著名英国女作家简·奥斯汀的第一部小说,是《傲慢与偏...
每天早上大声朗读美文 每天早上大声朗读美文  每天早上大声朗读  很多孩子的“生物钟”还处于“寒假假状态”  通常早上还迷...
因为痛 所以叫青春 人生没有最佳新人奖——金兰都《因为痛,所以叫青春》已故韩国总统金大中的别名是“忍冬草”,其意为战胜整...
人生阡陌交错美文品读 人生阡陌交错美文品读  阡陌交错;阡陌,交,错。  人生就像一张网,没有限制,时光就在这由无数条线交...
精彩片段摘抄 精彩片段摘抄大全  导语:倘若希望在金色的秋天收获果实,那么在寒意侵人的早春,就该卷起裤腿,去不懈地...
qq空间留言爱情话语 qq空间留言爱情话语  1、没有什么东西是过不去的,只有自己跟自己过不去,爱情里的伤害也是这样。  ...
丁丁张小说推荐:《永无止尽的...   《永无止尽的约会》是由作家丁丁张所创作的长篇小说,下面,yjbys小编为大家简单介绍一下这部小说...
人生旅途美文欣赏 人生旅途美文欣赏  导语:人生是一段旅程,起点是生,终点是死。旅程的时间有短有长,旅途中我们会遇到各...
优美段落100字摘抄(2)   23、历史常给人以警示,假若当初商纣王能广开言路,察纳忠言,何至于落得众叛亲离,葬身火海的下场呢...
沈奇岚经典语句   沈奇岚是复旦大学哲学系硕士,德国明斯特大学哲学博士,同时也是一名作家,著名艺术评论人,策展人。下...
让人一看就赞的晚安说说 让人一看就赞的晚安说说(15篇)  随着社交平台的兴起,越来越多人热衷于在线上发表说说,用于分享快乐...
有一种爱不能牵手美文 有一种爱不能牵手美文  灯光穿过我有些空朦的双眸,那条车水马龙五光十色的大街,那双紧紧牵着的手定格在...
《西游降魔篇》经典台词   《西游·降魔篇》是由周星驰监制、编剧、导演,文章、舒淇、黄渤等主演的古装神话电影。此片故事围绕年...
无眠之夜的心情说说 无眠之夜的心情说说(精选170句)  随着移动互联网和社交网络的发展,越来越多人会在社交平台上发布说...
论语译注摘抄及读后感 论语译注摘抄及读后感  对于孔子的精神是值得我们学习的。试想一下在距今如此遥远的时代,就有人能发出如...