RabbitMQ常见问题之消息堆积

文章目录

一、介绍

当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息达到上限。最

早接收到的消息,可能就会成为死信,会被丢弃,这就是消息堆积问题。

解决消息堆积有三种种思路:

  • 增加更多消费者,提高消费速度
  • 在消费者内开启线程池加快消息处理速度
  • 扩大队列容积,提高堆积上限

RabbitMQ3.6.0版本开始,就增加了Lazy Queues的概念,也就是惰性队列。惰性队列的特征如下:

  • 接收到消息后直接存入磁盘而非內存
  • 消费者要消费消息时才会从磁盘中读取并加载到内存
  • 支持数百万条的消息存储

二、使用惰性队列

1. 基于@Bean

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

2. 基于@RabbitListener

java 复制代码
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "lazy.queue", arguments = @Argument(name = "x-queue-mode", value = "lazy")),
            exchange = @Exchange(name = "simple.exchange"),
            key = "lazy"
    ))
    public void listenLazyExchange(String msg){
//        log.info("消费者接收到lazy.queue的消息:【" + msg + "】");
    }
相关推荐
麦兜*3 小时前
深入解析现代分布式事务架构:基于Seata Saga模式与TCC模式实现金融级高可用与数据最终一致性的工程实践全解析
分布式·金融·架构
難釋懷4 小时前
分布式锁-redission功能介绍
分布式
only-qi7 小时前
微服务场景下,如何实现分布式事务来保证一致性?
分布式·微服务·架构
m0_564876848 小时前
Distributed data parallel (DDP)分布式训练
分布式
BYSJMG9 小时前
计算机毕设选题推荐:基于Hadoop的交通事故数据可视化分析系统
大数据·vue.js·hadoop·分布式·后端·信息可视化·课程设计
野犬寒鸦9 小时前
从零起步学习并发编程 || 第三章:JMM(Java内存模型)详解及对比剖析
java·服务器·开发语言·分布式·后端·学习·spring
虫小宝11 小时前
查券返利机器人的异步任务调度:Java XXL-Job+Redis实现海量查券请求的分布式任务分发
java·redis·分布式
yq19820430115612 小时前
构建高可用资源导航平台:基于Django+Scrapy的分布式架构实践
分布式·scrapy·django
你这个代码我看不懂13 小时前
Kafka常见问题解答
分布式·kafka
Tony Bai13 小时前
Git 即数据库:Beads (bd) —— 专为 AI Agent 打造的分布式任务追踪引擎
数据库·人工智能·分布式·git