当前位置: 首页 > news >正文

理解RabbitMQ中的消息存储机制:非持久化、持久化与惰性队列(Lazy Queue)

文章目录

    • 1. 非持久化消息(Transient Messages)
      • 内存压力处理
    • 2. 持久化消息(Persistent Messages)
    • 3. 惰性队列(Lazy Queue)
      • 官方推荐
    • 总结

在RabbitMQ中,消息的存储和处理方式可以根据不同的需求进行配置。主要有三种消息存储机制:非持久化消息、持久化消息和惰性队列。本文将详细探讨这些机制及其应用场景,并解释为什么惰性队列现在是默认的推荐配置。

1. 非持久化消息(Transient Messages)

非持久化消息的特点如下:

  • 存储在内存中:非持久化消息在RabbitMQ中只存储在内存中,不会主动写入磁盘。这样的设计使得消息处理速度非常快,因为内存访问速度远快于磁盘访问。
  • 易失性:由于消息只存在于内存中,如果RabbitMQ服务器发生重启或崩溃,所有未处理的非持久化消息都会丢失。这种消息不具备数据持久性。
  • 适用场景:非持久化消息适用于对数据可靠性要求不高的场景,例如实时日志、临时通知、瞬时数据传输等。

内存压力处理

当非持久化消息大量堆积,导致内存压力过大时,RabbitMQ会采取以下措施:

  • 流控机制:RabbitMQ会启用流控机制,减缓或限制消息的接收速度,以保护系统稳定性。
  • 丢弃消息:在极端情况下,RabbitMQ可能会选择丢弃部分非持久化消息,以释放内存空间。
  • PageOut机制:当内存达到极限时,RabbitMQ可能会将部分非持久化消息写入磁盘(PageOut)以防止系统崩溃。这是一种极端情况下的保护措施。

2. 持久化消息(Persistent Messages)

持久化消息具有以下特点:

  • 内存和磁盘双重存储:持久化消息在接收时会同时存储在内存和磁盘中。这保证了即使RabbitMQ服务器重启或崩溃,消息也不会丢失。
  • 同步写入磁盘:持久化消息会同步写入磁盘,确保数据的持久性。这种机制虽然增加了一些处理延迟,但大大提高了消息的可靠性。
  • 适用场景:适用于需要确保消息不丢失的关键业务场景,如订单处理、交易信息等。

3. 惰性队列(Lazy Queue)

惰性队列是一种特殊的消息存储机制,专为处理大规模消息积压问题而设计。从RabbitMQ 3.6.0版本引入惰性队列以来,到3.12版本之后,惰性队列已经成为默认的队列类型。其特点如下:

  • 直接存入磁盘:惰性队列中的消息在接收时直接存入磁盘,而不是首先存入内存。这大大减少了内存的使用量。
  • 懒加载:只有在消费者准备消费消息时,消息才会从磁盘中读取并加载到内存中进行处理。
  • 支持大规模消息存储:惰性队列能够支持数百万条消息的存储,适用于高消息量和长时间积压的场景。
  • 降低内存压力:通过减少内存使用,避免了因消息积压导致的内存溢出问题,提高系统的稳定性。

官方推荐

从RabbitMQ 3.12版本开始,惰性队列成为默认队列类型。官方推荐将RabbitMQ升级到3.12版本或更高版本,以利用惰性队列的优势:

  • 提高系统稳定性:通过减少内存使用,惰性队列有效避免了因消息积压导致的内存压力问题。
  • 适应大规模消息堆积:惰性队列能够处理和存储大量消息,适用于需要高吞吐量的应用场景。
  • 优化资源使用:惰性队列使得系统资源利用更高效,特别是在消息量波动较大的情况下。

总结

  • 非持久化消息:仅存储在内存中,不会主动写入磁盘。适用于对可靠性要求不高、需要快速处理的场景。当内存压力过大时,可能触发流控或PageOut机制。
  • 持久化消息:同时存储在内存和磁盘中,确保消息的可靠性。适用于需要确保消息不丢失的关键业务。
  • 惰性队列:消息直接存入磁盘,减少内存使用,适用于大规模消息堆积的场景,避免内存压力。自3.12版本起成为默认队列类型,并受到官方推荐。

通过了解这些消息存储机制及其应用场景,开发者可以更好地利用RabbitMQ的功能,优化消息处理流程,提升系统性能和可靠性。

相关文章:

理解RabbitMQ中的消息存储机制:非持久化、持久化与惰性队列(Lazy Queue)

文章目录 1. 非持久化消息(Transient Messages)内存压力处理 2. 持久化消息(Persistent Messages)3. 惰性队列(Lazy Queue)官方推荐 总结 在RabbitMQ中,消息的存储和处理方式可以根据不同的需求…...

【机器学习】BP神经网络正向计算

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 BP神经网络正向计算1. 引言2. BP神经网络结构回顾3. 正向计算的基本原理4. 数学…...

谷粒商城实战笔记-108~109-elasticsearch删除与批量导入

一,108-全文检索-ElasticSearch-入门-put&post修改数据 第一种更新方式: POST customer/external/1/_update {"doc":{"name": "John Doew"} }第二种更新方式: POST customer/external/1 { "name&q…...

RabbitMQ:发送者的可靠性之使用消息确认回调

文章目录 配置RabbitMQ的ConfirmCallback使用ConfirmCallback发送消息实际使用中的注意事项总结 在开发消息驱动的系统时,消息的可靠传递至关重要。而RabbitMQ作为一个广泛使用的消息队列中间件,提供了多种消息确认机制,确保消息从生产者到交…...

HCIP学习 | OSPF---LSA限制、不规则区域、附录E、选路

目录 Days06(24.8.8)OSPF---LSA限制、不规则区域、附录E、选路 特殊区域 stub 区域, 末节区域 Totally stub :完全的末节区域 NSSA区域:(not so stub area) 非完全末节区域 完全的非完全的末节区域: …...

CVE-2017-15715~Apache解析漏洞【春秋云境靶场渗透】

Apache解析漏洞 漏洞原理 # Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。比如如下配置文件: AddType text/html .html AddLanguage zh-CN .cn# 其给 .html 后缀增加了 media-type ,值为 text/html ;给 …...

thinkphp 5.0.24生成模块

访问的形式生成模块: 1、需要在入口文件Public/index.php中加入以下代码: //生成Home模块,添加以下这句后,打开浏览器执行:http://www3.phptp5.com/public/index.php自动生成Home模块 \think\Build::module(Home); …...

值得注意!家里有带毛发动物就有浮毛?宠物空气净化器一键净化

上次跟朋友逛完街去她家,她家热情的哈基米开门就一个猛冲,我朋友接住就是一顿猛亲,亲猫一时爽,汗液粘着猫毛,粘得满手臂、满脸都是,看得鼻炎星人头皮发麻...好多养宠物的都说,梳毛根本不管用&am…...

Linux 代理(proxy)设置

有关网络代理的环境变量 环境变量说明可选的取值http_proxyhttp协议的网络连接使用该代理。ip:porthttp://ip:portsocks://ip:portsocks4://ip:portsocks5://ip:porthttps_proxyhttps协议的网络连接使用该代理。ftp_proxyftp协议使用该代理。all_proxy所有网络协议的网络连接都…...

操作系统真相还原:获取文件属性

14.15 获得文件属性 14.15.1 ls命令的幕后功臣 ls 命令中调用了大量的系统调用 stat64 和write ,其中stat64 用于获得文件的属性信息, write 用于把信息输出到屏幕,即标准输出。这里的 stat64 表示 64 位版本的 stat。 其函数原型是int sta…...

聚鼎装饰画:投资一家装饰画店铺要花费多少钱

在艺术的殿堂里,每一幅装饰画都是静默的诗篇,而开设一家装饰画店铺,便是将这份静谧与美好呈现给世界的开始。然而,背后的投资成本,却是一笔需要精打细算的账。 店铺的选址,犹如画家挑选画布,至关…...

编程的魅力、其重要性、学习方法以及未来趋势

在数字化时代,编程已不仅仅是程序员的专属技能,它逐渐渗透到我们生活的方方面面,成为连接现实与虚拟世界的桥梁。从日常使用的智能手机应用到探索宇宙奥秘的超级计算机,编程的力量无处不在。本文将深入探讨编程的魅力、其重要性、…...

ubuntu init set

1 cuda驱动 cuda use not open test 自己下载安装 以上操作后可能是核显卡,需要执行下列进入独立显卡,才能进行HDMI链接 sudo prime-select nvidia sudo prime-select intel prime-select query 该命令用于查看目前的显卡使用模式,可以看到…...

MySQL数据分析进阶(八)存储过程

※食用指南:文章内容为‘CodeWithMosh’SQL进阶教程系列学习笔记,笔记整理比较粗糙,主要目的自存为主,记录完整的学习过程。(图片超级多,慎看!) 【中字】SQL进阶教程 | 史上最易懂S…...

最深的根,

1498. 最深的根 题目 提交记录 讨论 题解 视频讲解 一个无环连通图可以被视作一个树。 树的高度取决于所选取的根节点。 现在,你要找到可以使得树的高度最大的根节点。 它被称为最深的根。 输入格式 第一行包含整数 NN,表示节点数量。 节点…...

【常见的设计模式】工厂模式

【设计模式专题之工厂方法模式】2.积木工厂   题目描述 小明家有两个工厂,一个用于生产圆形积木,一个用于生产方形积木,请你帮他设计一个积木工厂系统,记录积木生产的信息。   输入描述 输入的第一行是一个整数 N(1 …...

postgres收缩工具两种工具的使用对比

postgres收缩工具安装和使用 第一章 需要使用插件处理膨胀的原因 Postgresql通过数据多版本实现MVCC,现象是删除数据并不会真正删除数据,而是修改标识,更新是通过删除+插入的方式进行,所以在频繁更新的OLTP系统,会造成数据膨胀。 PG数据库本身有处理膨胀问题的vacuum工…...

仿真入门——CST软件如何设置分布式计算的共享储存

在 CST Studio Suite 的分布式计算中,常有用户因为某台机器的网络问题丢失某个数据。这里介绍一种方法,可以在使用分布式计算或 MPI 计算时设置共享存储。在这种情况下,不涉及文件传输,所有文件操作都在共享文件的媒介上完成。 数…...

【JVM基础17】——实践-说一下JVM调优工具

目录 1- 引言:2- ⭐核心:2-1 命令工具jpsjstackjmapjstat 2-2 可视化工具jconsoleVisualVM 3- 小结:3-1 说一下 JVM 调优的工具 1- 引言: 命令工具 jps——进程状态信息jstack——查看Java进程内线程的堆栈信息jmap——查看堆转…...

【QT】Qt中Websocket的使用

一、WebSocket的定义 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...