本篇博客将会通过我们的实际场景来演示如何在Spring Boot中集成RabbitMQ以及如何对各种队列模式进行操作。
一、场景描述我们通过模仿用户下订单时,订单系统分别通过短信,邮件或微信进行推送消息,如下图:
二、准备工作(1)创建两个Spring Boot项目分别对应生产者和消费者。
(2)导入依赖。
(3)定义生产者的配置文件。
application.yml:
(4)定义消费者的配置文件。
application.yml:
三、发布/订阅模式(Fanout) ???? 生产者项目名:rabbitmq-fanout-provider
(1)编写配置类。
(2)编写一个Controller类进行推送消息。
???? 消费者项目名:rabbitmq-fanout-consumer
邮件系统:
短信系统:
微信系统:
现在我们已经创建好了,将rabbitmq-fanout-provider和rabbitmq-fanout-consumer项目都跑起来,在浏览器输入:http://localhost:8021/sendFanoutMessage 进行发送消息。
消费者的控制台情况如下:
四、Work模式 4.1 轮询模式解释:所谓轮询分发就是有两个消费者监听同一个队列,那么当我们发大量消息的时候,交换器会将消息平均分配给两个消费者,就算其中一个消费者的处理效率比另一个高,也同样只能分配一样的消息数量。
???? 生产者(1)编写配置类。
(2)编写Controller类进行推送消息。
???? 消费者邮件系统:
短信系统:
我们把生产者和消费者项目都启动起来,访问 http://localhost:8021/sendWorkMessage 进行推送消息:
查看消费者的消费信息:
可以发现两者的工作效率不一样,但分配到的数量确实一样的,邮件收到的是偶数,短信收到的是奇数,这就是轮询分发!
4.2 公平分发解读:公平分发就是根据谁执行的效率高,那么就给其多分发消息进行处理,正所谓能者多劳。
实现公平分发很简单,在基于轮询分发的基础上,我们只需要在消费者项目的配置文件中加入以下代码:
表示将预处理模式更改为每次读取1条消息,在消费者未回执确认之前,不在进行下一条消息的投送。
故我们的消费者的配置文件整体如下:
application.yml:
我们重新启动生产者和消费者项目,消费情况如下:
现在可以发现,10条消息,邮件系统消费了7条,因为邮件系统比短信系统的执行效率更高!
五、路由模式(Direct) ???? 生产者项目名:rabbitmq-direct-provider
(1)编写配置类。
(2)编写Controller类进行推送消息。
???? 消费者项目名:rabbitmq-direct-consumer
邮件系统:
短信系统:
微信系统:
我们将生产者和消费者项目都跑起来,在浏览器输入:http://localhost:8021/sendDirectMessage 进行发送消息。
我们的消费者消费情况如下:
发现确实是只有我们的短信系统收到消息了,测试成功!
六、主题模式(Topic) ???? 生产者项目名:rabbitmq-topic-provider
(1)编写配置类。
(2)编写Controller类进行推送消息。
???? 消费者项目名:rabbitmq-topic-consumer
邮件系统:
短信系统:
微信系统:
现在把我们的项目生产者和消费者项目启动起来,并输入http://localhost:8021/sendTopicMessage 进行推送消息。
对我们的消费者接受消息的情况进行查看:
可以发现只有我们的邮件和短信系统收到了通知,测试成功!
小结以上就是【一心同学】整理的如何在【Spring Boot】中集成【RabbitMQ】并且通过【场景演示】在Spring Boot中对各种【队列模式】的使用,大家可以自己动手演示一遍,记忆更加深刻。
到此这篇关于Spring Boot集成RabbitMQ以及队列模式操作的文章就介绍到这了,更多相关SpringBoot集成RabbitMQ内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!