首页 > 其他分享 >RabbitMQ如果有100万消息堆积在MQ,如何解决(消息堆积怎么解决)

RabbitMQ如果有100万消息堆积在MQ,如何解决(消息堆积怎么解决)

时间:2024-10-28 23:21:56浏览次数:8  
标签:消费者 队列 RabbitMQ 惰性 MQ 消息 磁盘 堆积

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

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

  • 增加更多消费者,提高消费速度
  • 在消费者内开启线程池加快消息处理速度
  • 扩大队列容积,提高堆积上限,采用惰性队列
    • 在声明队列的时候可以设置属性x-queue-mode为lazy,即为惰性队列
    • 基于磁盘存储,消息上限高
    • 性能比较稳定,但基于磁盘存储,受限于磁盘IO,时效性会降低

惰性队列

惰性队列的特征如下:

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

面试题:如果有100万消息堆积在MQ,如何解决?

候选人:我在实际的开发中,没遇到过这种情况,不过,如果发生了堆积的问题,解决方案也有很多的:

第一:提高消费者的消费能力,可以使用多线程消费任务

第二:增加更多消费者,提高消费速度

           使用工作队列模式,设置多个消费者消费同一个队列中的消息

第三:扩大队列容积,提高堆积上限

可以使用RabbitMQ惰性队列,惰性队列的好处主要是

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

标签:消费者,队列,RabbitMQ,惰性,MQ,消息,磁盘,堆积
From: https://blog.csdn.net/weixin_63908159/article/details/143316015

相关文章

  • RabbitMQ之Java客户端的使用
    一、前言RabbitMQ支持多种语言访问,本次介绍RabbitMQJavaClient的一些简单的api使用,如声明Exchange、Queue,发送消息,消费消息,一些高级api会在后面的文章中详细的说明。二、项目实战1.引入依赖<dependency><groupId>com.rabbitmq</groupId><artifa......
  • 倍增法 and RMQ 问题的 ST 解法
    什么是倍增?倍增,从字面及数学的角度就是”成倍增长“的意思。这能使线性问题转化为数级处理,优化时间复杂度。不是人话是不是?听不懂是不是?看这里。这是指我们在进行递推时,如果状态空间很大,通常的线性递推无法满足时间与空间复杂度的要求,那么我们可以通过成倍增长的方式,只递推状......
  • 2024年最新互联网大厂精选 Java 面试真题集锦(JVM、多线程、MQ、MyBatis、MySQL、Redis
    前言春招,秋招,社招,我们Java程序员的面试之路,是挺难的,过了HR,还得被技术面,在去各个厂面试的时候,经常是通宵睡不着觉,头发都脱了一大把,还好最终侥幸能够入职一个独角兽公司,安稳从事喜欢的工作至今...近期也算是抽取出大部分休息的时间,为大家准备了一份通往大厂面试的小捷径,准备......
  • k8s 部署 emqx
    安装cert-manager使用Helm安装helmrepoaddjetstackhttps://charts.jetstack.iohelmrepoupdatehelmupgrade--installcert-managerjetstack/cert-manager\--namespacecert-manager\--create-namespace\--setinstallCRDs=true如果通过helm命令安装失败......
  • RabbitMQ 入门(三)SpringAMQP消息转换器
    一、消息转换器Spring会把你发送的消息序列化为字节发送给MQ,接收消息的时候,还会把字节反序列化为Java对象。只不过,默认情况下Spring采用的序列化方式是JDK序列化。众所周知,JDK序列化存在下列问题:-数据体积过大-有安全漏洞-可读性差JDK序列化方......
  • 【RocketMQ】路由中心 NameServer
    1  前言上节我们准备了源码以及环境的运行,其中我们启动的时候,会首先启动NameServer,那么这节我们先看下组件 NameServer,看看它主要是干什么的,在整个生产消费的链路中充当了什么角色,发挥着什么作用。2  NameServerRocketMQ路由管理、服务注册及服务发现的机制,NameServer......
  • 楼道堆积物视觉识别监控系统
    楼道堆积物视觉识别监控系统采用了AI神经网络和深度学习算法,楼道堆积物视觉识别监控系统通过摄像头实时监测楼道的情况,通过图像处理、物体识别和目标跟踪算法,系统能够精确地识别楼道通道是否被堆积物阻塞。楼道堆积物视觉识别监控系统检测到堆积物的存在,立刻通过告警信息提醒相关......
  • 【RocketMQ】源码以及环境搭建
    1  前言本节我们开始看一下RocketMQ相关的东西,我们主要看一条链路,大致如下:(1)环境的搭建,源码的下载(2)消息的结构以及相关类可能也会看下消息的存储(3)消息的生产以及发送过程(4)消息的消费过程大概看着四方面的内容,本节主要看下源码的下载以及环境的搭建。在看之前,我们顺便回......
  • go 连MQ
    go连MQpackagemainimport( "context" "fmt" "os" "github.com/apache/rocketmq-client-go/v2" "github.com/apache/rocketmq-client-go/v2/primitive" "github.com/apache/rocketmq-client-go/v2/produce......
  • Spring Boot 集成 RabbitMQ 完整教程(含 Windows 安装 RabbitMQ)
    在现代分布式系统中,消息队列是一种非常重要的组件,用于解耦应用程序的各个部分、异步处理任务、提高系统的可扩展性和容错性。RabbitMQ是一种流行的消息队列中间件,支持多种消息协议,其中AMQP(AdvancedMessageQueuingProtocol)是其默认支持的协议。本文将详细介绍如何在Wi......