SpringBoot + RabbitMQ 消息队列案例

SpringBoot + RabbitMQ 消息队列案例

  1. 确保你的MQ已经启动并配置好了,准备一个SpringBoot工程,这里我已经准备好了,mq-code是我的父工程,其他两个都是子工程。

  2. 引入依赖,这两个依赖是关键

  3. 在网页中打开你的MQ,输入你的ip地址,如果你是本地那么就是localhost或者127.0.0.1。我的是在虚拟机上的就要输入虚拟机的地址,加上端口号15672,一般都是15672。回车就进到了MQ的页面。刚开始进来的时候需要你输入用户和密码,这个用户和密码,和你当初配置MQ的时候有关。进来之后点击Admin选项,先添加一个用户,权限为Admin。

    之后大家再添加一个虚拟主机

  4. 之后在yml文件配置,我用的是yml格式的,使用其他格式的也没有问题。因为我有两个子工程,所以这个东西要去子工程里面配,父工程不需要配置

  5. 配置完毕后,我们先在2个子工程的启动类上,搞一下消息转换器

  6. 现在我们就可以开始写测试类了,在Publisher工程中写一个测试类,这里我通过交换机direct来帮我路由发送消息,交换机有很多种。当然也可也直接发现消息到队列中。现在写好了测试类,但是,交换机、队列、我们都还没有创建。那么我们在consumer工程里面创建一个并监听。

  7. 创建交换机、队列并监听。我直接通过注解的方式创建的队列和交换机。因为我使用的是direct交换机,我们不用确认是哪个队列来接收信息,而是通过Key来确定,比如这里Key是red,那么我发送消息的时候指定这个red的Key,那么我的消息就会发送到绑定了Key消息的队列中。

  8. 现在我们来测试一下,先启动consuner工程。看效果

  9. 接下来运行publisher的测试类,看控制台的效果。当生产者发送消息后,消费者就直接监听到了消息,并打印了出来。

  10. 接下来我们来测试一下,work模型。2个消费者来消费同一个队列,并加了休眠,来模拟两个不同的消费者性能,很明显消费者1的性能更高,2的性能就低一些,那么久应该是消费者1处理更多的数据。

  11. 编写测试类,运行看效果,控制台的效果可以看到消费者2只处理了一条数据,其他的全都是消费者1来处理的。这个的原因是因为我做了一个配置,这个配置的意思就是,当消费者处理了一条数据后再接收数据。如果不做这个配置,那么你得两个消费者会平均分配数据。

  12. 还记得我们写的消息转换器么?测试一下

    编写测试类

    1. 这里可以看到我吧Key进行了改变,那么我们可以用原来的队列,绑定一个blue来接收数据,也可以新创一个队列来接收数据。这里我就用原来的队列了。

      下图,可以看到,我只对消费者1绑定了Blue,并没有对2绑定,那么接收的时候就应该是1能接收到数据,2不能。但是现在那么都不能接收到数据,因为我们发送的HashMap,没有能来接收的参数,所以那么一个都接收不到,大家自己定义一个就好了。记得把消费者1的blue删除,否则会因为类型问题报错的

    2. 开始测试

  13. OK,这样简单的消息队列就完成了。

相关推荐
极光代码工作室18 小时前
基于SpringBoot的在线博客系统
java·springboot·web开发·后端开发
AI人工智能+电脑小能手1 天前
【大白话说Java面试题 第192题】【08_Kafka篇】第8题:死信队列是什么?延时队列是什么?
java·kafka·消息队列·死信队列·延时队列
AI人工智能+电脑小能手1 天前
【大白话说Java面试题 第191题】【08_Kafka篇】第7题:消息队列的优缺点
java·消息队列·系统设计·分布式架构·技术选型
AI人工智能+电脑小能手2 天前
【大白话说Java面试题 第190题】【08_Kafka篇】第6题:消息队列有什么作用?
java·kafka·消息队列·系统设计·分布式架构
Java爱好狂.2 天前
Java就业需要学习哪些内容?
spring·程序员·springboot·架构师·java面试·java面试题·java八股文
quweiie4 天前
tp8使用rabbitMQ消息队列的示例
消息队列·rabbitmq·thinkphp消息队列
极光代码工作室4 天前
基于SpringBoot的内容管理系统(CMS)
java·springboot·web开发·后端开发
欢醉5 天前
一次P0 故障:微服务线程数莫名暴涨 10 倍,线程问题踩坑
springboot·线程·springcloud
Steadfast_GG6 天前
RabbitMQ升级打怪之路(1) - RabbitMQ概述
消息队列·rabbitmq·流量削峰·消息分发·异步解耦
YDS8297 天前
大营销平台 —— 第二阶段初始化以及DB路由中间件的使用及基本原理
java·springboot·ddd