文章目录
1 本文背景
近期在做一个电商秒杀项目,在服务优化的阶段用到了 RabbitMQ 这个消息中间件,让秒杀请求不再瞬时冲击秒杀接口,而是利用消息中间件来让请求如队列般排队而来。
2 具体步骤
下面是最基础的一种 SpringBoot 集成 RabbitMQ 简单队列模式的方式:添加 pom 依赖、 yml 配置、配置类、消息发送者、消息接收者
1、添加 pom 依赖,这里需要添加 amqp,amqp 是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2、yaml 配置文件,各参数说明已给出注释
spring:
rabbitmq:
host: 192.168.10.132
username: guest
password: guest
# 虚拟主机
virtual-host: /
port: 5672
listener:
simple:
# 消费者最小数量
concurrency: 10
# 消费者最大数量
max-concurrency: 10
# 限制消费者每次只处理一条消息,处理完再继续下一条消息
prefetch: 1
# 启动时是否默认启动容器,默认true
auto-startup: true
# 被拒绝时重新进入队列
default-requeue-rejected: true
template:
retry:
# 发布重试,默认false
enabled: true
# 重试时间 默认1000ms
initial-interval: 1000
# 重试最大次数,默认3次
max-attempts: 3
# 重试最大间隔时间,默认10000ms
max-interval: 1000
# 重试间隔的乘数。比如配2.0 第一次等10s,第二次等20s,第三次等40s
multiplier: 1.0
3、配置类
@Configuration
public class RabbitMQConfig {
@Bean
public Queue queue() {
return new Queue("queue", true);
}
}
4、消息生产者(发送者)
@Service
@Slf4j
public class MQSender {
@Autowired
private RabbitTemplate rabbitTemplate;
public void send(Object msg) {
log.info("发送消息:" + msg);
rabbitTemplate.convertAndSend("queue", msg);
}
}
5、消息消费者(接收者)
@Service
@Slf4j
public class MQReceiver {
@RabbitListener(queues = "queue")
public void receive(Object msg) {
log.info("接收消息:" + msg);
}
}
3 测试结果
这里写一个接口调用消息发送者进行消息的发送
/**
* 测试发送 rabbitmq 的消息
*/
@RequestMapping("/mq")
@ResponseBody
public void mq() {
mqSender.send("Hello");
}
访问此请求
日志打印情况
rabbitmq_management UI 管控页面的情况
可见,根据上述测试情况,简单模式下,消息生产者与消息消费者已对接成功,接下来,后续可根据自己的业务代码进行真正的 RabbitMQ 的集成了,后续在我的秒杀项目中关于 RabbitMQ 的应用情况,有时间或许会写一篇文章,今天就写到这了,谢谢 ^v^