RabbitMQ的LazyQueue

news2025/1/9 5:53:31

在默认情况下,RabbitMQ会将接收到的信息保存在内存中以降低消息收发的延迟。但在某些特殊情况下,这会导致消息积压,比如:

  • 消费者宕机或出现网络故障
  • 消息发送量激增,超过了消费者处理速度
  • 消费者处理业务发生阻塞

一旦出现消息堆积问题,RabbitMQ的内存占用就会越来越高,直到触发内存预警上限。此时RabbitMQ会将内存消息刷到磁盘上,这个行为成为PageOut. PageOut会耗费一段时间,并且会阻塞队列进程。因此在这个过程中RabbitMQ不会再处理新的消息,生产者的所有请求都会被阻塞。

为了解决这个问题,从RabbitMQ的3.6.0版本开始,就增加了Lazy Queues的模式,也就是惰性队列。惰性队列的特征如下:

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

而在3.12版本之后,LazyQueue已经成为所有队列的默认格式。因此官方推荐升级MQ为3.12版本或者所有队列都设置为LazyQueue模式

1.控制台配置Lazy模式

在添加队列的时候,添加x-queue-mod=lazy参数即可设置队列为Lazy模式:
在这里插入图片描述

2.代码配置Lazy模式

在利用SpringAMQP声明队列的时候,添加x-queue-mod=lazy参数也可设置队列为Lazy模式:

@Beanpublic 
Queue lazyQueue(){   
 return QueueBuilder.durable("lazy.queue").lazy() // 开启Lazy模式
             .build();
             }

这里是通过QueueBuilderlazy()函数配置Lazy模式,底层源码如下:
在这里插入图片描述
当然,我们也可以基于注解来声明队列并设置为Lazy模式:

  @RabbitListener(queuesToDeclare = @Queue(
            name = "lazy.queue",
            durable = "true",
            arguments = @Argument(name = "x-queue-mode", value = "lazy")
    ))
    public void listenLazyQueue(String msg){
        log.info("接收到 lazy.queue的消息:{}", msg);
    }

3.更新已有队列为lazy模式

对于已经存在的队列,也可以配置为lazy模式,但是要通过设置policy实现。
可以基于命令行设置policy:

rabbitmqctl set_policy Lazy "^lazy-queue$" '{"queue-mode":"lazy"}' --apply-to queues  

命令解读:

  • rabbitmqctl :RabbitMQ的命令行工具
  • set_policy :添加一个策略
  • Lazy :策略名称,可以自定义
  • "^lazy-queue$" :用正则表达式匹配队列的名字
  • '{"queue-mode":"lazy"}' :设置队列模式为lazy模式
  • --apply-to queues:策略的作用对象,是所有的队列

当然,也可以在控制台配置policy,进入在控制台的Admin页面,点击Policies,即可添加配置:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1100384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C51--基本认知

单片机基本认知: 1、什么是单片机 单片机是一种集成电路芯片。 把具有数据处理能力的中央处理器 CPU、随机存储器RAM、只读存储器ROM。 多种 I / O 口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器…

JAVAEE初阶相关内容第十四弹--网络初识

写在前: 这一部分开启网络部分的相关知识,这一弹内容初始网络将主要进行网络相关知识的简单介绍,以及着重介绍协议、协议分层、OSI七层模型、TCP/IP五层模型、封装和分用。 需要认识协议,并知道协议的效果是什么;知道…

利用N点复数序列求2个N点实数序列的快速傅里叶变换

一、方法简介 通过一个点复数序列求出两个点实数序列的离散傅里叶变换,进一步提升快速傅里叶变换的效率。 二、方法详解 和是实数序列,且长度都为,定义复数序列: , 则序列和可表示为: 的离散傅…

LoRa与ZigBee有什么区别?

1、LoRa技术简介: 物联网应用中的无线技术有多种,可组成局域网或广域网。组成局域网的无线技术主要有2.4GHz的WiFi,蓝牙、Zigbee等,组成广域网的无线技术主要有2G/3G/4G等。这些无线技术,优缺点非常明显,可…

酷开系统 | 酷开科技让你放肆嗨唱,聆听内心最真实的声音

在这个喧嚣的城市里,每个人都像是一座孤岛,漂浮在茫茫人海之中,我们总是忙于奔波在各种琐事之间,渐渐忘记了内心深处的声音,我们压抑自己的情感,害怕被误解、被批评,然而真正的我们,…

利用FPGA和CPLD数字逻辑实现模数转换器

数字系统的嵌入式工程师熟悉如何通过使用FPGA和CPLD在其印刷电路板上将各种处理器,存储器和标准功能组件粘合在一起来实现其数字设计的“剩余”。除了这些数字功能之外,FPGA和CPLD还可以使用LVDS输入,简单的电阻电容器(RC&#xf…

BricsCAD v24.1.05(CAD建模软件)

BricsCAD是一款强大的CAD软件,可以帮助用户进行二维和三维图形设计和建模。BricsCAD支持多种CAD格式,包括DWG、DXF、DGN和STL等,并且可以与AutoCAD兼容。BricsCAD还提供了多种工具和功能,可以让用户进行快速、精确的设计和建模。 …

理解 Git 的三个工作区:工作区、暂存区和版本库

文章目录 创建 Git 本地仓库配置Git认识⼯作区、暂存区、版本库添加⽂件--场景查看 .git ⽂件添加⽂件--场景⼆ 创建 Git 本地仓库 要提前说的是,仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来。创建⼀个 Gi…

VRRP与BFD的联动

今天的你和昨天的你相比是不是又进步了 一,现网中常用的技术(vrrp与bfd) VRRP(Virtual Router Redundancy Protocol)是一种网络协议,用于提高路由器的可靠性和容错性。它允许多个路由器共享一个虚拟 IP 地址…

如何注册微信小程序

如何注册微信小程序 前言 因为最近沉迷和朋友们一起下班去打麻将,他们推荐了一个计分的小程序,就不需要每局都转账或者用扑克牌记录了,但是这个小程序不仅打开有广告,各个页面都植入了广告,用起来十分不适。 于是我…

竞品价格怎么监测

品牌在做产品营销、产品定价时,除了要做好自身产品的研发设计外,需要非常了解市场,了解消费者偏好、了解竞品数据,通过对比分析,从而知道哪些价位的产品更受消费者喜爱,怎样设计产品更符合市场要求等&#…

LORA无纸温控记录仪测温不准

偏差特别很是大 测量不准缘故原由1: 当无纸记录仪采用热电偶温度传感器测温时,假如热电偶的冷端补偿不能真实反映冷端温度会产生偏差。 解决方法: 使冷端补偿传感器环境温度和接线端子环境温度接近,公司生产的无纸记录仪内置冷…

4.05 用户中心-订单状态和订单动向

详细内容: http://www.gxcode.top/code

MATLAB中zp2tf函数用法

目录 语法 说明 示例 质点弹簧系统的传递函数 zp2tf函数的功能是将零极点增益滤波器参数转换为传递函数形式。。 语法 [b,a] zp2tf(z,p,k) 说明 [b, a] zp2tf(z, p, k) 将一个分解的传递函数表示方式转换。 将单输入/多输出(SIMO)系统的多输出…

聚观早报 | 荣耀Magic Vs2首销;iQOO 12系列已入网

【聚观365】10月17日消息 荣耀Magic Vs2首销 iQOO 12系列已入网 三星Galaxy S24 Ultra跑分曝光 北京医保移动支付升级 现代和起亚新能源汽车在美销量超20万辆 荣耀Magic Vs2首销 荣耀推出了全新的Magic Vs2折叠屏机型,这是继最轻薄折叠屏荣耀Magic V2、最时尚…

尚硅谷Flink(四)处理函数

目录 🦍处理函数 🐒基本处理函数 🐒按键分区处理函数(KeyedProcessFunction) 🐵定时器(Timer)和定时服务(TimerService) // 1、事件时间的案例 // 2、处理…

Kali工具介绍(超详细!史上最全!)

前言 如果你读过 Kali Linux 点评,你就知道为什么它被认为是最好的黑客渗透测试的 Linux 发行版之一,而且名副其实。它带有许多工具,使你可以更轻松地测试、破解以及进行与数字取证相关的任何其他工作。 它是道德黑客ethical hacker最推荐的…

【Unity3D编辑器开发】Unity3D中实现Transform组件拓展,快速复制、粘贴、复原【非常实用】

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 在开发中,常常会遇到频繁复制粘贴物体的坐标、旋转…

如何在ASO中使用App Store的促销文本

App Store中的促销文字如何使用,需要填写吗?从名称上就可以看出,这是用于推广应用的广告文字,由于其简洁而非常方便,这也是向现有或潜在用户展示将会有某种事件或重要更新的好方法。表明我们积极监控应用,总…

【滑动窗口】“正难则反法” 解决最小操作数的问题

Problem: 1658. 将 x 减到 0 的最小操作数 文章目录 题目解析算法原理分析Code复杂度 题目解析 首先我们来解读一下本题的题目含义 题目会给到我们一个整数数组和一个整数x,我们可以从左侧,也可以从右侧去减,只要让这个x最终减到【0】即可。不…