RabbitMQ 消费预取限制

本文介绍了如何通过RabbitMQ的消费预取限制来优化工作队列,避免消息堆积。在案例中,孙悟空和猪八戒作为消费者,预期效果是孙悟空(速度快)处理更多消息。然而,实际运行结果并未达到预期。通过设置`prefetch:1`,确保消费者每次只处理一条消息,从而解决了问题,实现了能者多劳并提高了效率。源码可在提供的链接中获取。
摘要由CSDN通过智能技术生成

上文我们讲解了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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Max恒

为了开源加油 ! !

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值