RabbitMQ高级篇-MQ的可靠性

news2025/5/18 3:02:05

目录

MQ的可靠性

1.如何设置数据持久化

1.1.交换机持久化

1.2.队列持久化

1.3.消息持久化

2.消息持久化

队列持久化:

消息持久化:

3.非消息持久化

非持久化队列:

非持久化消息:

4.消息的存储机制

4.1持久化消息(Persistent Messages)

4.2非持久化消息(Transient Messages)

4.3关键区别

4.4总结


之前的文章我们介绍了RabbitMQ的发送者的可靠性,接下来我来向大家讲解MQ的可靠性

发送者的可靠性文章

MQ的可靠性

消息到达MQ以后,如果MQ不能及时保存,也会导致消息丢失,所以MQ的可靠性也非常重要。

1.如何设置数据持久化

为了提升性能,默认情况下MQ的数据都是在内存存储的临时数据,重启后就会消失。为了保证数据的可靠性,必须配置数据持久化,包括:

  • 交换机持久化

  • 队列持久化

  • 消息持久化

我们以控制台界面为例来说明。

持久化:数据存储在磁盘,服务宕机了,数据也不会丢失。

非持久化:数据存储在内存,服务宕机了,数据也就不在了

1.1.交换机持久化

在控制台的Exchanges页面,添加交换机时可以配置交换机的Durability参数:

设置为Durable就是持久化模式,Transient就是临时模式。

1.2.队列持久化

在控制台的Queues页面,添加队列时,同样可以配置队列的Durability参数:

1.3.消息持久化

在控制台发送消息的时候,可以添加很多参数,而消息的持久化是要配置一个properties

Non-persistent:消息非持久化 Persistent:消息持久化

2.消息持久化

消息持久化是为了确保即使 RabbitMQ 服务重启或崩溃,消息也不会丢失。它主要包括以下几个步骤:

  1. 队列持久化

    • 当创建队列时,如果指定了队列的持久化属性(durable=true),那么该队列会被写入磁盘。即使 RabbitMQ 服务重启,该队列仍然存在。

    • 但如果队列中没有消息或消息没有被持久化,队列重启后将是空的。

  2. 消息持久化

    • 当发送消息时,如果指定了消息的持久化属性(delivery_mode=2),那么消息会被写入磁盘。即使 RabbitMQ 服务重启,消息仍然存在,直到被消费者消费。

    • 消息的持久化和队列的持久化需要同时设置,否则消息仍然可能丢失。例如,如果队列没有设置持久化,即使消息设置了持久化,队列在重启后也会消失,消息也就随之丢失。

3.非消息持久化

非持久化消息主要用于某些场景下,如消息的可靠性要求不高,或者需要快速传输大量消息。它主要包括以下几个步骤:

  1. 非持久化队列

  • 当创建队列时,如果没有指定队列的持久化属性(durable=false),那么该队列不会被写入磁盘。如果 RabbitMQ 服务重启,该队列将消失。
  1. 非持久化消息

  • 当发送消息时,如果没有指定消息的持久化属性(delivery_mode=1),那么消息不会被写入磁盘。如果 RabbitMQ 服务重启,消息将丢失。

4.消息的存储机制

4.1持久化消息(Persistent Messages)

  • In Memory:持久化消息会被缓存在内存中,以便快速处理。

  • Persistent:这些消息同时也会被写入磁盘进行持久化存储。即使RabbitMQ服务重启,持久化消息也不会丢失,因为它们在磁盘上有副本。

4.2非持久化消息(Transient Messages)

  • In Memory:非持久化消息同样会被缓存在内存中。

  • Paged Out:当内存资源紧张时,RabbitMQ会将部分非持久化消息从内存换出到磁盘。这些消息被换出到磁盘后,如果内存压力减轻,可能会被换回内存。但与持久化消息不同的是,非持久化消息在磁盘上没有持久化副本,因此在RabbitMQ服务重启时,这些消息不会被恢复。

4.3关键区别

  • 持久化消息:内存中的数据是缓存,同时在磁盘上有持久化副本,以确保数据不会丢失。

  • 非持久化消息:内存中的数据是主要存储位置,磁盘上的数据只是在内存压力下的一种临时存储方式,并不用于持久化。

4.4总结

  • 持久化消息:内存和磁盘上都有数据,磁盘上的数据用于持久化。

  • 非持久化消息:内存和磁盘上都有数据,但磁盘上的数据只是临时的,不用于持久化。

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

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

相关文章

fpga系列 HDL : Microchip FPGA开发软件 Libero Soc 项目仿真示例

新建项目 项目初始界面中创建或导入设计文件: 新建HDL文件 module test (input [3:0] a,input [3:0] b,output reg [3:0] sum,output reg carry_out );always (*) begin{carry_out, sum} a b; endendmodule点击此按钮可进行项目信息的重新…

DeepSearch:WebThinker开启AI搜索研究新纪元!

1,项目简介 WebThinker 是一个深度研究智能体,使 LRMs 能够在推理过程中自主搜索网络、导航网页,并撰写研究报告。这种技术的目标是革命性的:让用户通过简单的查询就能在互联网的海量信息中进行深度搜索、挖掘和整合,从…

springCloud/Alibaba常用中间件之Setinel实现熔断降级

文章目录 SpringCloud Alibaba:依赖版本补充Sentinel:1、下载-运行&#xff1a;Sentinel(1.8.6)下载sentinel&#xff1a;运行&#xff1a;Sentinel <br> 2、流控规则① 公共的测试代码以及需要使用的测试Jmeter①、流控模式1. 直接:2. 并联:3. 链路: ②、流控效果1. 快速…

Deeper and Wider Siamese Networks for Real-Time Visual Tracking

现象&#xff1a; the backbone networks used in Siamese trackers are relatively shallow, such as AlexNet , which does not fully take advantage of the capability of modern deep neural networks. direct replacement of backbones with existing powerful archite…

黑马程序员C++2024版笔记 第0章 C++入门

1.C代码的基础结构 以hello_world代码为例&#xff1a; 预处理指令 #include<iostream> using namespace std; 代码前2行是预处理指令&#xff0c;即代码编译前的准备工作。&#xff08;编译是将源代码转化为可执行程序.exe文件的过程&#xff09; 主函数 主函数是…

foxmail - foxmail 启用超大附件提示密码与帐号不匹配

foxmail 启用超大附件提示密码与帐号不匹配 问题描述 在 foxmail 客户端中&#xff0c;启用超大附件功能&#xff0c;输入了正确的账号&#xff08;邮箱&#xff09;与密码&#xff0c;但是提示密码与帐号不匹配 处理策略 找到 foxmail 客户端目录/Global 目录下的 domain.i…

Crowdfund Insider聚焦:CertiK联创顾荣辉解析Web3.0创新与安全平衡之术

近日&#xff0c;权威金融科技媒体Crowdfund Insider发布报道&#xff0c;聚焦CertiK联合创始人兼CEO顾荣辉教授在Unchained Summit的主题演讲。报道指出&#xff0c;顾教授的观点揭示了Web3.0生态当前面临的挑战&#xff0c;以及合规与技术在推动行业可持续发展中的关键作用。…

PowerBI链接EXCEL实现自动化报表

PowerBI链接EXCEL实现自动化报表 曾经我将工作中一天的工作缩短至2个小时&#xff0c;其中最关键的一步就是使用PowerBI链接Excel做成一个自动化报表&#xff0c;PowerBI更新源数据&#xff0c;Excel更新报表并且保留报表格式。 以制作一个超市销售报表为例&#xff0c;简单叙…

腾讯云MCP数据智能处理:简化数据探索与分析的全流程指南

引言 在当今数据驱动的商业环境中&#xff0c;企业面临着海量数据处理和分析的挑战。腾讯云MCP(Managed Cloud Platform)提供的数据智能处理解决方案&#xff0c;为数据科学家和分析师提供了强大的工具集&#xff0c;能够显著简化数据探索、分析流程&#xff0c;并增强数据科学…

Android framework 中间件开发(一)

在Android开发中,经常会调用到一些系统服务,这些系统服务简化了上层应用的开发,这便是中间件的作用,中间件是介于系统和应用之间的桥梁,将复杂的底层逻辑进行一层封装,供上层APP直接调用,或者将一些APP没有权限一些操作放到中间件里面来实施. 假设一个需求,通过中间件调节系统亮…

MATLAB中的概率分布生成:从理论到实践

MATLAB中的概率分布生成&#xff1a;从理论到实践 引言 MATLAB作为一款强大的科学计算软件&#xff0c;在统计分析、数据模拟和概率建模方面提供了丰富的功能。本文将介绍如何使用MATLAB生成各种常见的概率分布&#xff0c;包括均匀分布、正态分布、泊松分布等&#xff0c;并…

C# 面向对象 构造函数带参无参细节解析

继承类构造时会先调用基类构造函数&#xff0c;不显式调用基类构造函数时&#xff0c;默认调用基类无参构造函数&#xff0c;但如果基类没有写无参构造函数&#xff0c;会无法调用从而报错&#xff1b;此时&#xff0c;要么显式的调用基类构造函数&#xff0c;并按其格式带上参…

在 C# 中将 DataGridView 数据导出为 CSV

在此代码示例中&#xff0c;我们将学习如何使用 C# 代码将 DataGridView 数据导出到 CSV 文件并将其保存在文件夹中。 在这个程序中&#xff0c;首先&#xff0c;我们必须连接到数据库并从中获取数据。然后&#xff0c;我们将在数据网格视图中显示该数据&#xff0c;…

MySQL中表的增删改查(CRUD)

一.在表中增加数据&#xff08;Create&#xff09; INSERT [INTO] TB_NAME [(COLUMN1,COLUMN2,...)] VALUES (value_list1),(value_list2),...;into可以省略可仅选择部分列选择插入&#xff0c;column即选择的列&#xff0c; 如图例可以选择仅在valuelist中插入age和id如果不指…

项目思维vs产品思维

大家好&#xff0c;我是大明同学。 这期内容&#xff0c;我们来聊一下项目思维和产品思维的区别。 项目是实施关键&#xff0c;力求每一步都精准到位&#xff1b;产品则是战略导向&#xff0c;确保所选之路正确无误。若缺乏优异成果&#xff0c;即便按时完成&#xff0c;也只…

游戏引擎学习第285天:“Traversables 的事务性占用”

回顾并为当天的工作做准备 我们有一个关于玩家移动的概念&#xff0c;玩家可以在点之间移动&#xff0c;而且当这些点移动时&#xff0c;玩家会随之移动。现在这个部分基本上已经在工作了。我们本来想实现的一个功能是&#xff1a;当玩家移动到某个点时&#xff0c;这个点能“…

文件上传Ⅲ

#文件-解析方案-执行权限&解码还原 1、执行权限 文件上传后存储目录不给执行权限&#xff08;即它并不限制你上传文件的类型&#xff0c;但不会让相应存有后门代码的PHP文件执行&#xff0c;但是PNG图片是可以访问的&#xff09; 2、解码还原 数据做存储&#xff0c;解…

基于深度学习的工业OCR数字识别系统架构解析

一、项目场景 春晖数字识别视觉检测系统专注于工业自动化生产监控、设备运行数据记录等关键领域。系统通过高精度OCR算法&#xff0c;能够实时识别设备上显示的关键数据&#xff08;如温度、压力、计数等&#xff09;&#xff0c;并定时存储至Excel文件中。这些数据对于生产过…

go-中间件的使用

中间件介绍 Gin框架允许开发者在处理请求的过程中加入用户自己的钩子(Hook)函数这个钩子函数就是中间件&#xff0c;中间件适合处理一些公共的业务逻辑比如登录认证&#xff0c;权限校验&#xff0c;数据分页&#xff0c;记录日志&#xff0c;耗时统计 1.定义全局中间件 pac…

学习以任务为中心的潜动作,随地采取行动

25年5月来自香港大学、OpenDriveLab 和智元机器人的论文“Learning to Act Anywhere with Task-centric Latent Actions”。 通用机器人应该在各种环境中高效运行。然而&#xff0c;大多数现有方法严重依赖于扩展动作标注数据来增强其能力。因此&#xff0c;它们通常局限于单一…