SpringBoot学习(六)—— springboot快速整合RabbitMQ
目录
简单模式是Rabbit MQ最简单入门的案例,其中一个生产者,一个消费者。无需声明交换机(其实是有个默认的交换机),声明完一个队列以后,生产者往这里发送,消费者则监听该队列,对消息做出响应。
应用场景:如两个用户之间的聊天。
2,Work queues 模式
工作队列模式在工人之间分配任务(竞争的消费者模式),就是有多个消费者的简单模式,多个消费者一起监听该队列,Rabbit MQ 会确保队列中的某一条消息只会被某一个消费者消费。
应用场景:如多个用户抢某个订单(高并发下争抢同一个资源的记得考虑加锁)
3,Publish/Subscribe 模式
发布/订阅模式一次向许多消费者发送消息,还是一个生产者多个消费者,但是该模式需要显示声明交换机了,将创建的多个队列与该交换机进行绑定,生产者将消息发给交换机,由交换机发给已经绑定好的队列,对应的某队列的消费者消费该队列中的信息。
应用场景:群发某个邮件,推送某条广告
4,Routing 模式
路由模式是有选择地接收消息,还是显示声明交换机,将队列与交换机绑定,由生产者将消息发给交换机,由交换机发给对应的队列,由对应的消费者消费信息。但是队列绑定交换机时需要指定一个routingkey ,这样的话,生产者再向生产者发消息的时候,会判断具体的 routingkey 值,并将符合对应 routingkey 值的消息发送给对应的队列。
应用场景:封装若干类错误类型通知
5,Topics 模式
主题模式根据模式(主题)接收消息,同路由模式一样,只不过不再是根据具体的 routingkey 值做判断,是根据 routingkey 值模糊匹配的。其中,星号代表多个单词 , 井号代表一个单词。
点击 http://localhost:15672/ ,如下图所示
pom.xml中新增
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
application.properties中加入
# RabbitMQ spring.rabbitmq.host=127.0.0.1 spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest # 并发消费者的初始化值 spring.rabbitmq.listener.concurrency=10 # 并发消费者的最大值 spring.rabbitmq.listener.max-concurrency=20 # 每个消费者每次监听时可拉取处理的消息数量 spring.rabbitmq.listener.prefetch=5
代码实战
简单模式和工作队列模式没有指定交换机,rabbitMQ的精妙之处不能体现出来,而路由模式和主体模式都有 routingkey 值,故挑其一,本文以发布/订阅模式和路由模式为例,其余的都可类比。不全写,是因为这是快速上手使用系列,最短的时间精力明白来龙去脉,才是该系列的宗旨,人类畏惧晦涩冗长的,喜欢简短直接的。
新增代码后的目录如下所示
RabbitConfig.java
package com.example.config; import org.springframework.amqp.core.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class RabbitConfig { //==============发布/订阅模式============== //队列A @Bean() public Queue queueA() { return new Queue("fanoutQueueA"); } //队列B @Bean() public Queue