RabbitMQ消息持久化与Lazy模式对比分析
RabbitMQ消息持久化与Lazy模式对比分析
在RabbitMQ中,消息持久化与Lazy模式是两种不同的机制,分别针对消息可靠性、存储优化等不同维度设计。以下从六个层面进行深度对比:
一、核心目标与作用对象差异
维度 | 消息持久化(delivery_mode=2 ) | Lazy模式(x-queue-mode=lazy ) |
---|---|---|
主要目标 | 保证消息内容在服务重启后不丢失 | 优化消息存储方式,减少内存压力 |
作用对象 | 单条消息的存储介质选择 | 整个队列的消息存储策略 |
触发条件 | 生产者发送消息时显式设置 | 队列声明时配置或通过Policy全局策略 |
数据可靠性 | 依赖队列持久化协同工作 | 仅影响运行时存储位置,不决定数据存续性 |
二、存储机制对比
机制特性 | 消息持久化 | Lazy模式 |
---|---|---|
存储位置 | 持久化消息强制落盘 | 所有消息直接写入磁盘(无论是否持久化) |
触发条件 | 需要显式设置delivery_mode=2 | 队列声明时参数定义或Policy覆盖默认行为 |
运行时行为 | 消息在内存中处理,按需刷盘 | 消息直接写入磁盘,消费时加载到内存 |
重启后表现 | 需队列持久化+消息持久化双重保障 | 队列元数据存在则消息保留(与持久化无关) |
关键区别:
- 消息持久化是消息级别的属性,决定消息是否在服务异常时保留内容
- Lazy模式是队列级别的存储策略,决定运行时消息的物理存储位置
三、数据可靠性组合条件
要实现消息不丢失,需满足以下条件:
- 队列持久化(
durable=true
)→ 保证队列元数据存在 - 消息持久化(
delivery_mode=2
)→ 保证消息内容落盘 - Lazy模式 → 运行时减少内存占用(非必须但推荐)
典型场景验证:
配置组合 | 服务重启后结果 | 运行时内存占用 |
---|---|---|
队列持久化 + 消息持久化 | 消息保留 | 高 |
队列持久化 + Lazy模式 | 消息保留(即使未设置消息持久化) | 低 |
队列非持久化 + Lazy模式 | 队列和消息均丢失 | 低 |
注意:在RabbitMQ 3.12+版本中,Lazy模式默认启用,但若队列未持久化,重启后仍会丢失所有数据
四、性能影响对比
性能指标 | 消息持久化 | Lazy模式 |
---|---|---|
内存占用 | 高(消息在内存处理) | 极低(仅元数据在内存) |
磁盘I/O | 中等(按需刷盘) | 高(所有消息直接写磁盘) |
吞吐量 | 较高(依赖内存速度) | 较低(受磁盘速度限制) |
消费延迟 | 低(消息在内存处理) | 中(需从磁盘加载到内存) |
实验数据参考:
- Lazy模式+消息持久化:每秒处理约2万条消息,内存占用稳定在50MB以下
- 默认模式+消息持久化:每秒处理5万条消息,内存峰值可达2GB
五、典型应用场景
场景类型 | 消息持久化适用性 | Lazy模式适用性 |
---|---|---|
金融交易 | ✔️(必须保证消息零丢失) | ✔️(减少内存压力) |
日志收集 | ❌(允许部分丢失) | ✔️(处理海量数据) |
实时监控 | ❌(低延迟优先) | ❌(需内存快速处理) |
离线批处理 | ✔️(数据完整性要求高) | ✔️(支持长时间堆积) |
最佳实践:
- 高可靠场景:
队列持久化 + 消息持久化 + Lazy模式
- 高吞吐场景:
队列非持久化 + 默认模式
(临时数据处理) - 海量堆积场景:
队列持久化 + Lazy模式
(允许消息非持久化)
六、配置代码示例
1. 消息持久化配置(Java Spring AMQP)
// 发送持久化消息
rabbitTemplate.convertAndSend("exchange", "routingKey", message, msg -> {msg.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT); // delivery_mode=2return msg;
});
2. Lazy模式声明(队列级别)
@Bean
public Queue lazyQueue() {return QueueBuilder.durable("lazy.queue").lazy() // 启用Lazy模式.build();
}
3. Policy全局策略(RabbitMQ命令行)
# 所有以"lazy_"开头的队列自动启用Lazy模式
rabbitmqctl set_policy Lazy_Policy "^lazy_" '{"queue-mode":"lazy"}' --apply-to queues
结论
消息持久化与Lazy模式本质解决不同维度问题:
- 消息持久化是数据可靠性的基石,需与队列持久化配合使用
- Lazy模式是存储优化手段,适用于内存敏感场景
在RabbitMQ 3.12+版本中,建议所有持久化队列默认启用Lazy模式,并配合delivery_mode=2
实现高可靠低内存占用的消息处理。
相关文章:
RabbitMQ消息持久化与Lazy模式对比分析
RabbitMQ消息持久化与Lazy模式对比分析 在RabbitMQ中,消息持久化与Lazy模式是两种不同的机制,分别针对消息可靠性、存储优化等不同维度设计。以下从六个层面进行深度对比: 一、核心目标与作用对象差异 维度消息持久化(delivery_…...
Springboot中的异常处理
ControllerAdvice虽然只是在处理Controller注解的类,在Service层抛出的异常如果没有在Service层被处理的话,会向上抛出到到Controller层,再被异常处理器捕获 1. 全局异常处理 ControllerAdvice:全局处理器,处理有Con…...
深入解析Go语言Channel:源码剖析与并发读写机制
文章目录 Channel的内部结构Channel的创建过程有缓冲Channel的并发读写机制同时读写的可能性发送操作的实现接收操作的实现 并发读写的核心机制解析互斥锁保护环形缓冲区等待队列直接传递优化Goroutine调度 实例分析:有缓冲Channel的并发读写性能优化与最佳实践缓冲…...
C++中虚析构函数的作用是什么?为什么基类需要虚析构函数?
C中虚析构函数的作用是什么?为什么基类需要虚析构函数? 在C中,虚析构函数(virtual destructor)的作用是确保在通过基类指针或引用删除派生类对象时,能够正确调用派生类的析构函数,从而避免资源…...
ClickHouse合并任务与查询延迟专项测试
ClickHouse合并任务与查询延迟专项测试 1. 测试目的 验证周期性高延迟(~900ms)是否由后台合并任务(Merge)引起。 2. 测试环境 组件配置ClickHouse版本24.8.3.13服务器硬件8核CPU / 32GB内存 / NVMe SSD测试表log_test 3. 测试…...
3.14学习总结
今天完成了几道关于二叉树的算法题 关于二叉树的最小最大深度和数据流中的第k大元素,用到优先队列,学习了有关java的基础知识,学习了双指针法。...
OpenHarmony自定义子系统、部件与模块
如图所示,OpenHarmony系统源码中,大体上按照不同种类的功能分成多个子系统,然后一个子系统内部进一步在同类功能上的差异性划分成一个或多个部件,也就是说一个部件表示一个具体功能的源码集合。最后一个部件的源码再划分成一个或多…...
PPT 相关资料介绍
文章目录 一、iSlide 工具二、免费 PPT 模板下载三、Kimi 一键生成 PPT 一、iSlide 工具 iSlide 官网 二、免费 PPT 模板下载 7个完全免费的PPT模板下载网站 优品PPT 第一PPT 三、Kimi 一键生成 PPT ☆...
C# 发送邮件 报错:此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站。
C# 发送邮件 报错:此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站。 报错信息分析 当你遇到如下报错时: 此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站。…...
大数据-spark3.5安装部署之standalone模式
真实工作中还是要将应用提交到集群中去执行,Standalone模式就是使用Spark自身节点运行的集群模式,体现了经典的master-slave模式。集群共三台机器,具体如下 u22server4spark: master worker u22server4spark2: worke…...
接口自动化入门 —— Jmeter实现在接口工具中关联接口处理方案
1. JMeter 接口关联处理的核心概念 接口关联是指在多个接口请求之间共享数据,例如将一个接口的返回值作为另一个接口的输入参数。常见的场景包括: 使用登录接口返回的 Token 作为后续接口的认证信息。 将一个接口返回的 ID 作为另一个接口的请求参数。…...
WebForms HTML:深入理解与高效运用
WebForms HTML:深入理解与高效运用 引言 随着互联网技术的飞速发展,WebForms HTML作为Web开发中的一种重要技术,已经成为了许多开发者日常工作中不可或缺的一部分。本文将深入探讨WebForms HTML的原理、应用场景以及高效运用技巧࿰…...
VSCode 搭建C++编程环境 2025新版图文安装教程(100%搭建成功,VSCode安装+C++环境搭建+运行测试+背景图设置)
名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、VScode下载及安装二、安装 MinGW-w64 工具链三、Windows环境变量配置四、检查 M…...
【Linux 内核 | 操作系统 | 内核编译】内核编译中与锁调试相关的设置有哪一些?内核 Debug 选项中 LockDep 和其他锁调试选项详解
问题描述: 我在看内核锁调试的信息时,看到了一些内核编译参数相关的设置,开启这些信息可以帮助我们在测试环境中调试锁的竞争情况,可以详细的打印出来一些线程持有锁,一些线程争抢锁的信息。 以下是我的配置&#…...
LinuX---Shell---变量
系统预定义变量 常用系统变量 PATH、HOME、PWD、SHELL、USER等 获取变量的值 语法:$变量名 $和变量名之间不能有空格。 案例实操 查看系统变量的值 fengubuntu:~$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/u…...
深入理解Spring MVC:构建灵活的Web应用
大家好!今天我们来聊聊Spring框架中的一个重要模块——Spring MVC。Spring MVC是一个基于MVC(Model-View-Controller)架构的Web框架,它提供了强大的功能来处理HTTP请求、生成动态内容以及管理Web应用程序的流程。无论是构建RESTfu…...
详解SQL数据查询功能
数据查询 一、 单表查询1. 选择表中的若干列2. 选择表中的若干元组3. ORDER BY 子句4. 聚合函数5. GROUP BY 子句6. LIMIT 子句综合示例: 二、 多表查询1. 等值连接查询 (Equi-Join)2. 非等值连接查询 (Non-Equi Join)3. 自然连接查询 (Natural Join)4. 复合条件连接…...
ArcGIS Pro 车牌分区数据处理与地图制作全攻略
在大数据时代,地理信息系统(GIS)技术在各个领域都有着广泛的应用,而 ArcGIS Pro 作为一款功能强大的 GIS 软件,为数据处理和地图制作提供了丰富的工具和便捷的操作流程。 车牌数据作为一种重要的地理空间数据…...
Git 本地常见快捷操作
Git 本地常见快捷操作 📌 1. 基本操作 操作命令初始化 Git 仓库git init查看 Git 状态git status添加所有文件到暂存区git add .添加指定文件git add <file>提交更改git commit -m "提交信息"修改最后一次提交信息git commit --amend -m "新…...
大视频背景暗黑风格的wordpress企业主题免费下载
整体风格是黑色的,首页首屏大视频背景,动态效果非常好。向下滚动时,滚动的特效也不错。 原文 https://www.bixugao.com/wp/26.html...
Apache Tomcat漏洞,对其进行升级
我们付出一些成本,时间的或者其他,最终总能收获一些什么。 升级背景: 近日,新华三盾山实验室监测到 Apache 官方修复了一个远程代码执行漏洞 (CVE-2025-24813) ,其CVSS3 漏洞评分为 7.5 。 影响范围 9.0.0.M1 ≤…...
fs的proxy_media模式失效
概述 freeswitch是一款简单好用的VOIP开源软交换平台。 在fs的使用过程中,某些场景只需要对rtp媒体做透传,又不需要任何处理。 在fs1.6的版本中,我们可以使用proxy_media来代理媒体的转发,媒体的协商由AB路端对端处理ÿ…...
Spring Boot与Apache Ignite集成:构建高性能分布式缓存和计算平台
1. 前言 1.1 什么是Apache Ignite Apache Ignite是一个高性能的分布式内存计算平台,支持内存缓存、分布式计算、流处理和机器学习等功能。它提供了低延迟的数据访问和强大的计算能力,适用于需要高性能和可扩展性的应用。 1.2 为什么选择Apache Ignite 高性能:Ignite利用内…...
深度学习优化-Gradient Checkpointing
数学原理参考: 梯度检查点技术(Gradient Checkpointing)详细介绍:中英双语-CSDN博客 视频讲解参考: 用梯度检查点来节省显存 gradient checkpointing_哔哩哔哩_bilibili Gradient Checkpointing(梯度检查…...
Linux内核实时机制19 - RT调度器3 - 实时任务出入队
Linux内核实时机制19 - RT调度器3 - 实时任务出入队 1、enqueue_task_rt和dequeue_task_rt都会调用dequeue_rt_stack接口, 当请求的rt_se对应的是任务组时,会从顶部到请求的rt_se将调度实体出列。 2、任务添加到rt运行队列时, 如果存在多个…...
CRM企业客户关系管理系统产品原型方案
客户关系管理系统(CRM)是企业产品应用中的典范,旨在通过信息技术和互联网技术提升企业核心竞争力,优化企业与顾客在销售、营销和服务方面的互动。本作品提供了一套通用型的CRM系统原型模板,涵盖数据管理、审批流程、统…...
HashMap ,HashTable , ConcurrentHashMap 面试
双列集合 HashMap 线程不安全的 HashMap 允许键和值为 null。不过要留意,HashMap 并非线程安全的,在多线程环境下使用可能会出现问题。 数组链表红黑树 jdk1.8 双列集合 存储keyvalue 底层数组的形式存在,初始值 为16 也可以在new HashMap…...
PyTorch 系列教程:探索自然语言处理应用
本文旨在介绍如何使用PyTorch进行自然语言处理(NLP)的基础知识,包括必要的库、概念以及实际代码示例。通过阅读本文,您将能够开始您的NLP之旅。 1. 理解PyTorch PyTorch是一个开源的机器学习库,基于Torch库࿰…...
【操作系统安全】任务2:用户与用户组
目录 一、用户与用户组介绍 1.1 用户 1.2 用户组 1.3 用户与用户组的关系 二、用户与用户组管理 2.1 用户管理 2.1.1 创建用户 2.1.2 设置用户密码 2.1.3 删除用户 2.2 用户组管理 2.2.1 创建用户组 2.2.2 删除用户组 2.2.3 将用户添加到用户组 三、影子账户创建…...
DeepSeek技术解析:MoE架构实现与代码实战
以下是一篇结合DeepSeek技术解析与代码示例的技术文章,重点展示其核心算法实现与落地应用: DeepSeek技术解析:MoE架构实现与代码实战 作为中国AI领域的创新代表,DeepSeek在混合专家模型(Mixture of Experts, MoE&…...
LLM对齐方法作用:主要解决大型语言模型(LLMs)输出与人类价值观、需求和安全规范不一致的问题
LLM对齐方法作用:主要解决大型语言模型(LLMs)输出与人类价值观、需求和安全规范不一致的问题 对齐方法(Alignment Methods) 主要解决大型语言模型(LLMs)输出与人类价值观、需求和安全规范不一致的问题。其核心目标是让模型生成的内容更符合人类预期,同时确保伦理合规性…...
【SpringMVC】常用注解:@RequestBody
1.作用 用于获取请求实体内容,直接使用得到的是keyvalue&keyvalue的数据。获取请求实体内容不适用get请求。 2.属性 required 描述是否有请求体,默认值为true。当取值为true时,get 请求方式会报错。如果取值为false,get请…...
brpc中的doublyBufferedData解析
double buffer解析(附brpc改进版) 双buffer是一个工程中常见的解决读写问题的结构。指的是读只读buff,写操作发生在写buff上。当写buff写完之后switch两个buff,然后写进程擦除原来的读数据,更新为最新的数据。 我们有…...
基于Android的记事本APP设计与实现:从需求分析到功能实现(超级简单记事本,附源码+文档报告)
基于Android的记事本APP设计与实现:从需求分析到功能实现 (以前大学课堂作业,抄在这里当个回忆吧) 引言 随着社会的不断进步,信息化建设不断发展,电子文字输入在生活、学习、工作中占有越来越重要的作用…...
Linux 部署 Spring Boot 项目, Web项目(2025版)
Linux 部署 Spring Boot 项目,Web项目(2025版) 一、简洁版1.1 Linux 环境配置1.2 将Spring Boot 项目部署到 Linux 中 二、详细版2.1 Linux 环境配置2.2 Spring Boot 项目搭建2.3 mysql 配置2.4 测试项目2.5 将Spring Boot 项目部署到 Linux …...
泛目录技术:智能缓存提升网站速度与稳定性
泛目录技术:智能缓存提升网站速度与稳定性 在现代网站运营中,速度和稳定性是用户体验和SEO优化的关键因素。2025奥顺互联推出的泛目录技术,通过智能缓存机制,为网站提供了卓越的性能提升和稳定性保障。本文将深入探讨该技术的特点…...
CNN SSP, ASPP, PPM 分割任务经典尺度聚合模块
SSP:Spatial Pyramid Pooling 让任意大小图像最终输出的特征维度始终固定,便于接全链接层。 4x4, 2x2,1x1区域的maxpooling,让任意大小图像最终输出最终特征维度始终为 (1641)*256 ASSP:Atrous Spatial Pyramid Pooling 不进行…...
Nping- Nmap中的一个工具-用于生成网络数据包并分析响应
Nping 工具介绍 Nping 是 Nmap 项目中的一个网络工具,用于生成网络数据包并分析响应。它可以用于网络探测、性能测试、防火墙测试、ARP 欺骗检测等多种场景。Nping 支持多种协议(如 TCP、UDP、ICMP、ARP),并允许用户自定义数据包…...
海马下载 1.0.2 | 纯净无广告,极简设计,不限速下载工具
海马下载是一款轻量级下载工具,仅保留核心链接下载功能,体积小巧仅21MB。实测无广告弹窗且不限速,适合追求简洁体验的用户。操作界面直观易用,可快速添加任务并查看下载进度。 大小:21M 下载地址: 百度网…...
【蓝桥杯—单片机】第十五届省赛真题代码题解析 | 思路整理
第十五届省赛真题代码题解析 前言赛题代码思路笔记竞赛板配置建立模板明确基本要求显示功能部分频率界面正常显示高位熄灭 参数界面基础写法:两个界面分开来写优化写法:两个界面合一起写 时间界面回显界面校准校准过程校准错误显示 DAC输出部分按键功能部…...
maven之自定义插件
写在前面 在使用maven肯定是离不开插件的,比如执行mvn clean或者时mvn compile其实运行的就是绑定的默认插件。虽然我们一般不需要来自定义插件,但是为了使用的过程中更加的清晰,来尝试自定义插件还是很有必要的,所以本文就一起来…...
Unity单例模式(c#泛型基类)
Unity单例模式 1 单例模式2 继承mono脚本单例模式基类3 SingletonAutoMono脚本 1 单例模式 单例模式基类模块 范型加约束,支持new来构造 //单例模式基类模块 //范型加约束,支持new来构造 public class BaseManager<T> where T :new() {private static T instance;public …...
java 中桥方法(Bridge Method)解决泛型和多态(即:类型兼容)而存在的
在 Java 中,**桥方法(Bridge Method)**是编译器自动生成的一种方法,主要用于解决泛型类型擦除和继承中的类型兼容性问题。以下是关于桥方法的几点关键信息: 1. 桥方法的作用 类型擦除兼容性:Java 的泛型在…...
Centos7阿里云yum源
#Step1:下载repository 没有wget命令 就用curl wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #Step2:安装epel基础组件源 没有wget命…...
leetcode 102. 二叉树的层序遍历
方法一: 用两个数组进行迭代遍历 class Solution {public List<List<Integer>> levelOrder(TreeNode root) {if(root null) {return new ArrayList<List<Integer>>();}List<TreeNode> cur new ArrayList<TreeNode>();cur.a…...
Trae插件革命:用VSPlugin Helper实现VSCode市场插件全自动安装
之前有读者留言说trae都没有c的插件用,确实是这样,trae的插件源用的是open vsx,而c/c插件是vscode官方插件市场的,如果想直接在trae中安装c/c插件是不行的,只能先从vscode官方插件市场把vsix后缀文件先下载下来&#x…...
SpringCloud带你走进微服务的世界
认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 单体架构 单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部…...
多线程(超详细) (ε≡٩(๑>₃<)۶ 一心向学)
多线程目录 一、认识线程 1、概念: 1) 线程是什么 2) 线程为什么存在 3) 进程与线程的区别 二、创建线程 1、方法1:继承Thread类 2、方法2:实现 Runnable 接口 3、方法3:匿名内部类创建 Thread 子类对象 4、方法4&#…...
LabVIEW旋转设备状态在线监测系统
为了提高大型旋转设备如电机和水泵的监控效率和故障诊断能力,用LabVIEW软件开发了一套实时监测与故障诊断系统。该系统集成了趋势分析、振动数据处理等多项功能,可实时分析电机电流、压力、温度及振动数据,以早期识别和预报故障。 项目背…...
RSS和TSS在网络流量处理中的优化作用
摘要 本文深入探讨了RSS(Receive Side Scaling)和TSS(Transmit Side Scaling)这两种网络流量处理技术的实现方法及其在网络性能优化中的重要作用。通过对硬件和软件实现方式的详细分析,阐述了它们如何在多队列网卡、多核处理器系统以及虚拟化环境中提升网络处理性能和吞吐…...