RabbitMQ常见问题之消息堆积

一、介绍

当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息达到上限。最
早接收到的消息,可能就会成为死信,会被丢弃,这就是消息堆积问题。

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

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

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

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

二、使用惰性队列

1. 基于@Bean

@Bean
    public Queue lazyQueue(){
   
        return QueueBuilder
                .durable("lazy.queue")
                .lazy()
                .build();
    }

2. 基于@RabbitListener

    @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 + "】");
    }

相关推荐

  1. Rabbitmq消息堆积问题以及解决方案

    2024-01-18 07:52:02       43 阅读
  2. RocketMQ消息堆积问题

    2024-01-18 07:52:02       49 阅读
  3. RabbitMQ 常见问题

    2024-01-18 07:52:02       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-18 07:52:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-18 07:52:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-18 07:52:02       82 阅读
  4. Python语言-面向对象

    2024-01-18 07:52:02       91 阅读

热门阅读

  1. spark-udf函数

    2024-01-18 07:52:02       49 阅读
  2. Redis教程——Redis string 字符串

    2024-01-18 07:52:02       56 阅读
  3. 什么是解释器模式

    2024-01-18 07:52:02       57 阅读
  4. 设计模式——解释器模式

    2024-01-18 07:52:02       56 阅读
  5. docker 安装mysql 并支持远程访问

    2024-01-18 07:52:02       55 阅读
  6. flask 与小程序 菜品详情和分享功能

    2024-01-18 07:52:02       56 阅读
  7. SaaS应用框架对比:Spring Boot vs Flask vs FastAPI

    2024-01-18 07:52:02       56 阅读