RabbitMq消息堆积问题及惰性队列

news/2024/7/5 2:35:41

消息堆积问题

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

在这里插入图片描述

解决消费对接问题

1.增加更多的消费者,提高消费者速度
2.在消费则内开启线程池加快消息处理速度
3.使用惰性队列,扩大队列容积,提高堆积上限

惰性队列

rabbitmq3.6.0 版本开始,新增了Lazy Queues概念,也就是惰性队列。

惰性队列的特征如下:

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

普通的队列会设置一个预警值默认40% 当队列到了40%时,mqBroker 会阻止生产者发送消息。并将队列中消息持久化到磁盘。等腾出空间了再接收消息。所以mq的性能是一个不稳定,波浪形的。 而惰性队列呢在接收消息后会直接写到磁盘,所以不会触发队列的存储预警,性能具有稳定性,延迟性。

正因为惰性队列支持百万的消息存储,所以用它来解决消息堆积问题再好不过了。

惰性队列的实现
1.运行中队列变为惰性队列
在这里插入图片描述

2.直接声明队列为惰性队列

在这里插入图片描述

惰性队列的优点有哪些?

  • 基于磁盘存储,消息上限高
  • 米有间歇性的page-out,性能比较稳定

惰性队列的缺点有哪些

  • 基于磁盘存储,消息时效性会降低
  • 性能受限于磁盘的IO

http://lihuaxi.xjx100.cn/news/1241528.html

相关文章

希尔贝壳邀您参加2023深圳国际人工智能展览会

2023深圳国际人工智能展览会“AIE”将于2023年5月16-18日在深圳国际会展中心 (宝安)举办,希尔贝壳受邀参加,展位号:A331。 伴随着智能行业的快速发展,展会已被越来越多的企业列入每年必选展会,也成为各采购商选购的理…

Android-MTK平台功能需求解决:客户电池NTC功能(高低温报警功能)--第2天分析与解决

一、进一步修改代码内容-过程 今日了解到,昨日所修改的kernel层的mtk_charger.h文件位于A13部分,然6769平台A13部分的kernel层不参与编译,那么修改后再编译等等后续操作验证结果自然无效,参与编译kernel层是A12部分的kernel-4.19…

springcloud 父项目建立(一)

我们开发项目,现在基本都用到maven,以及用父子项目,以及公共模块依赖,来构建方便扩展的项目体系; 首先我们建立父项目 microservice ,主要是一个pom,管理module,以及管理依赖&#x…

是德DSOX3014T MSOX3014T数字逻辑示波器

概述: keysight是德DSOX3014T MSOX3014T数字逻辑示波器8.5 英寸电容触摸屏让操作和归档变得更加简单,可以加速您的测试,独有的区域触控触发技术支持您在几秒钟内轻松隔离信号,独有的区域触控触发技术支持您在几秒钟内轻松隔…

面向对象练习(3)

封装与继承 目录 1.使用封装实现企鹅类 2.选民投票 3.使用继承实现电子宠物系统 4.游戏开发-面向对象 5.信息输出-面向对象 6.电子宠物系统 7.程序分析 1.使用封装实现企鹅类 package dh03;/*** * author XXX 保证健康值的有效性(0-100)&#xf…

云服务器上使用Docker Compose创建Redis三主三从集群

一、环境 云服务器Ubuntu20.4Dokcer 24.0.2 二、步骤 目录结构是这样: 绿色的目录是用来存储容器中的文件,不需要我们手动创建,将路径配置在配置文件中即可。黑色的目录和文件需要自己手动创建。 我们一共创建7个容器: redis…

java基础(多线程)-常用方法具体使用

一、Thread.start()方法 start()方法:启动子线程 new Thread();当前线程的状态为NEW 调用start()方法之后当前线程的状态变为RUNNABLE 二、Thread.sleep()静态方法 1. 调用sleep会让当前线程从Running进入Timed Waiting 状态 2.其他线程可以使用interrupt方法…

散热差、设计古板,因循守旧的联想Thinkpad还能获得忠粉的青睐吗?

拥有航天梦想的联想ThinkPad,在5月18日的新品发布会上,再次与中国航天太空创想达成了合作,将整场发布会的格调提升到了没有“边际”的高度。 发布会上,联想ThinkPad宣布了几款新品的面世,产品性能的升级和优化必不可少…