RabbitMQ惰性队列使用

说明:惰性队列是为了解决消息堆积问题,当生产者生产消息的速度远高于消费者消费消息的速度时,消息会大量的堆积在队列中,而队列中存放的消息数量是有限的,当超出数量时,会造成消息的丢失。而扩容队列,实际上不太现实,因为队列的消息是存在内存中的,内存也有上限。

从RabbitMQ 3.6.0版本开始,增加了惰性队列的概念(Lazy Queues),惰性队列在接收到消息后是存到磁盘中,而不是内存,只有当消费者消费消息时,才把消息从磁盘中读取出来,加载到内存中。

使用

@RabbitListener方式

java 复制代码
    @RabbitListener(queuesToDeclare = @Queue(
            name = "lazy.queue",
            durable = "true",
            arguments = @Argument(name="x-queue-mode", value="lazy")
    ))
    public void listenerQueue(String message){
        System.out.println("message = " + message);
    }

@Bean方式

java 复制代码
    @Bean
    public Queue lazyQueue(){
        return QueueBuilder
                .durable("lazy.queue")
                .lazy()
                .build();
    }

正常队列、惰性队列各自发送10万条消息,观察区别

(正常队列)


(惰性队列)

区别:

  • 惰性队列使用的内存量大于正常队列,因为增加了磁盘的写入/读取

  • 惰性队列消费消息,速度较正常队列更稳定,当然速度更慢(上面只是偶然情况,大多数情况比正常队列慢)

总结

惰性队列用于解决消息堆积问题

相关推荐
JLWcai202510094 天前
铸造领域树脂砂轮|金利威多场景解决方案,20 + 配方覆盖全需求
mongodb·zookeeper·eureka·spark·rabbitmq·memcached·storm
风吹夏回4 天前
RabbitMQ 核心术语 + Python pika 方法完整讲解
分布式·python·rabbitmq
风吹夏回4 天前
RabbitMQ 三种模式入门:HelloWorld、WorkQueue、PubSub
分布式·rabbitmq·ruby
霸道流氓气质4 天前
分布式追踪与 RequestId 传播完全指南
分布式
cheems95274 天前
[RabbitMQ高级特性] 消息确认机制:从 Ready / Unacked 到 basicAck、basicReject、basicNack 的底层拆解
分布式·rabbitmq·ruby
枫华落尽4 天前
【Hadoop01-完全分布式运行模式】
分布式
隔壁阿布都4 天前
ShedLock 分布式定时任务锁框架介绍
spring boot·分布式
文艺倾年4 天前
【强化学习】数学推导专题,20W字总结(十五)
人工智能·分布式·大模型·强化学习·vibecoding
ACP广源盛139246256734 天前
GSV9001S@ACP#1080P 级视频处理芯片,物理 AI 普及终端的高性价比选择
大数据·人工智能·分布式·嵌入式硬件·spark
guslegend4 天前
第1章:初始Kafka
分布式·kafka