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主题交换机模式

相关内容

热门资讯

简短生日祝福语 简短生日祝福语(精选130句)  在日常学习、工作或生活中,大家都经常接触到祝福语吧,祝福语可以起到...
适合早上发的早安问候语 适合早上发的早安问候语(通用15篇)  无论是在学校还是在社会中,大家都写过问候语吧,问候语可以让对...
祝自己生日快乐的祝福语 祝自己生日快乐的祝福语15篇  在平凡的学习、工作、生活中,大家总免不了要接触或使用祝福语吧,祝福语...
婚礼祝福语 关于婚礼祝福语(精选100句)  在平平淡淡的日常中,要用到祝福语的情况还是蛮多的,借助祝福语人们可...
中秋节员工发给公司领导的祝福... 中秋节员工发给公司领导的祝福语短信  无论在学习、工作或是生活中,大家都不可避免地会接触到祝福语吧,...
9月9日的重阳节经典祝福语 9月9日的重阳节经典祝福语  在学习、工作乃至生活中,大家都不可避免地会接触到祝福语吧,祝福语可以起...
预祝考试顺利的祝福语 预祝考试顺利的祝福语(精选90句)  在日常生活或是工作学习中,许多人都有过写祝福语的经历,对祝福语...
开工大吉的祝福语 开工大吉的祝福语(精选155句)  在平平淡淡的学习、工作、生活中,大家都不可避免地会接触到祝福语吧...
进宅的祝福语 进宅的祝福语  无论是身处学校还是步入社会,大家最不陌生的就是祝福语了吧,祝福语是指对人们的美好祝福...
母亲节快乐的简短祝福语 母亲节快乐的简短祝福语(精选305句)  母爱情深深似海,母爱爱重重如山,平日碎语与闲言,安知皆为儿...
教师节贺卡暖心祝福语 教师节贺卡暖心祝福语  在平时的学习、工作或生活中,大家都用到过祝福语吧,祝福语的种类很多,可分为吉...
立冬微信祝福语 立冬微信祝福语(通用195句)  在我们平凡的日常里,大家都尝试过写祝福语吧,祝福语不限制字数,在运...
妈妈生日祝福问候语 妈妈生日祝福问候语大全(精选70句)  只想跟您说声"辛苦",刚刚出生到学会走路,衣食住行到工作读书...
新年贺卡祝福语简短 新年贺卡祝福语简短(精选155句)  祝福语是指对人们的美好祝福的语句。祝福语在社会发展中已经不是仅...
三八妇女节祝福句子 三八妇女节祝福句子(精选30句)  我愿是一块板擦,为你抹去生活的烦恼;我愿是一把教鞭,为你指引幸福...
女生生日祝福语 女生生日祝福语15篇  在我们平凡的日常里,大家对祝福语都不陌生吧,借助祝福语人们可以表达自己对他人...
中秋节给老师的祝福语 中秋节给老师的祝福语(合集15篇)  在日常的学习、工作、生活中,大家都用到过祝福语吧,祝福语可以增...
甜蜜温馨重阳佳节祝福语 甜蜜温馨重阳佳节祝福语  在平时的学习、工作或生活中,说到祝福语,大家肯定都不陌生吧,祝福语有助于促...
给朋友的婚礼祝福语 给朋友的婚礼祝福语  在平日的学习、工作和生活里,大家对祝福语都不陌生吧,祝福语不限制字数,在运用上...
给妈妈的妇女节祝福语 关于给妈妈的妇女节祝福语(精选200句)  在平凡的学习、工作、生活中,大家总免不了要接触或使用祝福...