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万条消息,观察区别

(正常队列)


(惰性队列)

区别:

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

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

总结

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

相关推荐
2501_941143328 小时前
微服务架构与服务网格在高并发互联网系统中的优化与工程实践经验分享
rabbitmq
2501_941871459 小时前
C++结合Redis与WebSocket构建高并发实时在线游戏服务设计与实战分享:成都多人竞技游戏架构优化经验
rabbitmq
2501_9418705613 小时前
多语言微服务架构下的分布式事务管理与最终一致性实践
rabbitmq
2501_9418787413 小时前
智能推荐系统与多语言微服务实现:Python、Java、C++与Go全栈开发实战
rabbitmq
2501_9418091415 小时前
Python在高并发互联网系统开发中的架构设计与性能优化全流程实践分享
rabbitmq
2501_9411458516 小时前
基于 Node.js 与 NestJS 构建高并发微服务与实时 API 系统实践分享
rabbitmq
2501_9411471116 小时前
Python大数据处理实战:异步IO与协程高效数据解析代码解析
rabbitmq
2501_9418798116 小时前
多语言微服务架构下的微服务灰度发布与蓝绿部署实践
rabbitmq
2501_9418846119 小时前
能城市管理系统开发与多语言微服务实践:Python、Java、C++与Go全栈实现解析
rabbitmq
每天进步一点_JL19 小时前
事务与消息中间件:分布式系统中的可见性边界问题
分布式·后端