RabbitMQ如何保证消息不丢

如何保证Queue消息能不丢呢?

RabbitMQ在接收到消息后,默认并不会立即进行持久化,而是先把消息暂存在内存中,这时候如果MQ挂了,那么消息就会丢失。所以需要通过持久化机制来保证消息可以被持久化下来。

队列和交换机的持久化

在声明队列的时候,可以通过设置durable 参数为true 来创建一个持久化队列,持久化队列会在Rabbitmq服务器重启后保留,确保队列的元数据不会丢失。

在声明交换器时,也可以通过设置durable参数为tue来创建一个持久化交换机,持久化交换机会在RabbitMQ服务器重启后保留,以确保交换机的元数据不好丢失。

绑定关系通常与队列和交换机相关联。当创建绑定关系时,还是可以设置durablue参数为true,以创建一个持久化绑定。持久化绑定关系会在服务器重启后保留,以确保绑定关系不会丢失。

 

持久化消息

生产者发送的消息可以通过设置消息的deliveryMode创建持久化消息。持久化消息在发送到持久化队列后,将在服务器重启后保留,以确保消息不会丢失。

deliveryMode 是一项用于设置消息传递模式的属性,用于指定消息的持久性级别。分别是有两个值

1.非持久化 这是默认的传递模式,如果消息被设置为非持久化,RabbitMQ将尽力将消息传递给消费者,但不会将其写入磁盘,这意味着如果RabbitMQ服务器在消息传递之前崩溃或重启,消息可能会丢失。

2.持久化 如果消息被设置为持久化,RabbitMQ会将消息写入磁盘,以确保即使在RabbitMQ服务器重启时,消息也不会丢失。持久化消息对于重要的消息非常有用,以确保它们不会再传递过程中丢失。

通过设置deliveryMode 类实现消息的持久化。但是需要注意,将消息设置为持久化会增加磁盘IO开销

消费者确认机制

有了持久化机制后,那么怎么保证消息在持久化下来之后一定能被消费者消费呢?

这里就涉及到消息的消息确认机制。

在RabbitMQ中,消费者处理消息成功后可以向MQ发送ack回执,MQ收到ack回执后才会删除该消息,这样才能确保消息不会丢失。如果消费者在处理消息中出现了异常,那么就会返回nack回执,MQ收到回执之后会重新投递一次,如果消费者一直都没有返回ACK/NACK的话,那么他也会在尝试重新投递。


无法做到100%不丢

虽然我们通过发送者端进行异步回调,MQ进行持久化,消费者做确认机制,但是也没办法保证100%不丢,因为MQ的持久化其实是异步的。即使我们开了持久化,也有可能在内存暂存成功后,异步持久化之前宕机了,那么这个消息就会丢失。

如果想要做到100%不丢失,就需要引入本地消息表,来通过轮询的方式来进行消息重投了。

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

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

相关文章

11. C语言标准函数库

C语言制定了一组使用方式通用的函数,称为C语言标准函数库,用于实现编程常用功能,标准函数库由编译器系统提供,并按功能分类存储在不同源代码文件中,调用标准库内函数时需要首先使用 #include 连接对应的源代码文件。 【…

URL网址中的#是什么意思 -- flutter等单页应用常用的hash路由

前言 在现代的前端开发中,Flutter和React等框架广泛采用哈希路由(Hash Routing)来构建单页应用(SPA)。哈希路由的设计哲学源自URL中的#号,原本用于网页内的定位,但现在它在SPA中扮演着更为关键…

Tensorflow2.0笔记 - 常见激活函数sigmoid,tanh和relu

本笔记主要记录常见的三个激活函数sigmoid,tanh和relu,关于激活函数详细的描述,可以参考这里: 详解激活函数(Sigmoid/Tanh/ReLU/Leaky ReLu等) - 知乎 import tensorflow as tf import numpy as nptf.__ve…

『python爬虫』ip代理池使用 协采云 账密模式(保姆级图文)

目录 实现效果实现思路代码示例总结 欢迎关注 『python爬虫』 专栏,持续更新中 欢迎关注 『python爬虫』 专栏,持续更新中 实现效果 在官网原版demo基础上小改了一下,修正了接口错误(把2023改成2024就可以了),原版demo只能测试单个ip,我这里批量测试所有…

Angular 将一个字符串进行逐字显示的方法汇总

接上文https://blog.csdn.net/qq_44327851/article/details/136201219, 公司项目是angular,所以实际中使用,我是要考虑到应用Angular框架中,下面是我想到的一些方法汇总,欢迎大家检阅! 在组件的HTML模板中…

为什么MySQL中多表联查效率低,连接查询实现的原理是什么?

MySQL中多表联查效率低的原因主要涉及到以下几个方面: 数据量大: 当多个表通过连接查询时,如果这些表的数据量很大,那么查询就需要处理更多的数据,这自然会降低查询效率。 连接操作复杂性: 连接查询需要对参与连接的每个表中的数…

从零学习Linux操作系统 第三十二部分 ansible中剧本的应用

一、什么是playbook及playbook的组成 1.Playbook的功能 playbook 是由一个或多个play组成的列表 Playboot 文件使用YAML来写的 play就是一个个模块用列表的方式体现出来 playbook的语法是用YAML的预防进行书写的 2.YAML 简介 是一种表达资料序列的格式,类似XM…

电子元器件选型与实战应用—10 5000字介绍,用MOS管搭建的8种常用电路

文章目录 1. 逻辑门电路1.1 非门1.2 与非门1.3 或非门2. OD门和线与3. 推挽电路4. 电源防反接4.1 PMOS防反接4.2 NMOS防反接5. 电源防串电6. 缓启动开关电路7. 均流电路8. 电平转换(level shift)前文推荐:

【从零开始学GIS再到精通GIS】专题图制作-地图渲染-地图整饰

本篇主要介绍如何在gis中进行专题图制作-地图渲染-地图整饰;示例数据下载链接该网站更新了很多有关地理的数据。 1 数据准备:点、线、面等矢量数据、栅格数据的准备等(下一更会详细介绍数据处理等方面的内容); 2 加载…

关于我在项目中封装的一些自定义指令

什么是指令 在Vue中提供了一套为数据驱动视图更为方便的操作,这些操作被称为指令系统。我们看到的v-来头的行内属性,都是指令,不同的指令可以完成或者实现不同的功能。 除了核心功能默认内置的指令(v-model和v-show)…

开源计算机视觉库opencv-python详解

开源计算机视觉库opencv-python详解 OpenCV-Python的核心功能:安装OpenCV-Python:使用OpenCV-Python的基本步骤:OpenCV-Python的高级应用:注意事项:OpenCV-Python的高级应用示例:1. 人脸识别2. 目标跟踪3. …

记录一则 线上域名证书更新及cdn证书更新

本篇为阿里云免费证书更新记录。 登录阿里云账号 搜索数字证书管理服务管理控制台 点击创建证书 输入你的域名 填写相关信息(注:域名验证方式选择文件验证) 等待审核通过(时间不久,一般为半小时内) …

Vue2高级篇

Vue高级 Vue生命周期 生命周期又称为生命周期回调函数、生命周期函数、生命周期钩子, 是Vue在运行过程中的关键时刻帮我们调用的一些指函数, 生命周期函数名字不可修改, 其中的this指向的是vm或组件实例对象. 常用的生命周期钩子: mounted: 发送ajax请求、启动定时器、绑定…

【Web安全】SQL各类注入与绕过

【Web安全】SQL各类注入与绕过 【Web安全靶场】sqli-labs-master 1-20 BASIC-Injection 【Web安全靶场】sqli-labs-master 21-37 Advanced-Injection 【Web安全靶场】sqli-labs-master 38-53 Stacked-Injections 【Web安全靶场】sqli-labs-master 54-65 Challenges 与62关二…

python并发编程:IO模型

一 IO模型 二 network IO 再说一下IO发生时涉及的对象和步骤。对于一个network IO \(这里我们以read举例\),它会涉及到两个系统对象,一个是调用这个IO的process \(or thread\),另一个就是系统内核\(kernel\)。当一个read操作发生时&#xff…

无代理方式实现VMware的迁移?详细解析

在当今数字化时代,数据的安全性和可用性对于企业至关重要。尤其是在VMware转变订阅策略后,原本永久订阅的产品转变为以年付费订阅的形式,导致客户不得不支付更多的费用,大幅增加了成本。同时,客户也对VMware未来发展前…

Go-gin-example 第三部分 编写一个简单的文件日志系统

文章目录 本文目标新建logging包file.go编写log文件当前目录结构 接入自定义的log功能验证功能 本文目标 在上一节中,我们解决了 API’s 可以任意访问的问题,那么我们现在还有一个问题,就是我们的日志,都是输出到控制台上的&…

k8s-kubeapps图形化管理 21

结合harbor仓库 由于kubeapps不读取hosts解析,因此需要添加本地仓库域名解析(dns解析) 更改context为全局模式 添加repo仓库 复制ca证书 添加成功 图形化部署 更新部署应用版本 再次进行部署 上传nginx 每隔十分钟会自动进行刷新 在本地仓库…

人人都写过的6个bug

大家好&#xff0c;我是知微。 程序员写bug几乎是家常便饭&#xff0c;也是我们每个人成长过程中难以避免的一部分。 为了缓解这份“尴尬”&#xff0c;今天想和大家分享一些曾经都会遇到过的bug&#xff0c;让我们一起来看看这些“经典之作”。 1、数组越界 #include <…

Python爬虫:http和https介绍及请求

HTTP和HTTPS 学习目标&#xff1a; 记忆 http、https的概念和区别记忆 浏览器发送http请求的过程记忆 http请求头的形式记忆 http响应头的形式了解 http响应状态码 1 为什么要复习http和https 在发送请求&#xff0c;获取响应的过程中 就是发送http或https的请求&#xff0c…