上文我们讲解了rabbitmq基本的使用方法下面我开始介绍RabbitMQ 消费预取限制
源码在文章末尾👇🏻
1. 案例场景
work queue,工作队列,可以提高消息处理速度,避免队列消息堆积
为了避免消息堆积, 现在我们有两个消费者分别是孙悟空和猪八戒, 孙悟空的速度快, 自然工作效率更高, 而猪八戒呢自然效率不如孙悟空, 所以我们的预期就是能者多劳, 孙悟空多干一点, 猪八戒少干一点
2. 实现的代码如下
孙悟空消费者(为了表现孙悟空的快sleep值为20)
@RabbitListener(queues = "simple.queue")
public void listenWorkQueue1(String msg) throws InterruptedException {
System.out.println("消费者孙悟空接收到消息:【" + msg + "】" + LocalTime.now());
Thread.sleep(20);
}
猪八戒消费者(为了表现猪八戒的慢sleep值为200)
@RabbitListener(queues = "simple.queue")
public void listenWorkQueue2(String msg) throws InterruptedException {
System.err.println("消费者猪八戒........接收到消息:【" + msg + "】" + LocalTime.now());
Thread.sleep(200);
}
但是最终的运行结果并不是我们想要的, 红色的猪八戒的消费的依然还是很多的, 而且运行的时间还很慢
3. 开启消费预取限制
为了解决上述那种问题mq提供了消费预取限制
prefetch: 1 #每次只能获取一条消息,处理完成才能获取下一个消息
spring:
rabbitmq:
host: localhost # rabbitMQ的ip地址
port: 5672 # 端口
username: guest
password: guest
virtual-host: /
listener:
simple:
prefetch: 1 #每次只能获取一条消息,处理完成才能获取下一个消息
最终实现结果, 不仅实现了能者多劳的效果, 还提高了消费的效率
源码项目地址:
链接: https://pan.baidu.com/s/1vnYVEPGO8B5XLCf9Xc67cA 提取码: few9