【消息队列笔记】chp3-如何确保消息不丢失

news2025/1/18 8:11:42

一、检测消息是否丢失

我们要保证消息的可靠交付,首先就要知道消息是否丢失了。如何做到这一点呢?

对于IT基础设施比较完善的公司,可以使用分布式链路追踪系统来追踪每一条消息。如果没有这样的系统,可以使用消息的有序性来验证是否有消息丢失。原理很简单,我们在producer端给每个发出的消息附加一个连续递增的序号,然后在consumer端检查这个序号的连续性

如果消息没有丢失,那么consumer收到的消息序号必然是递增的,如果检测到序号不连续,那就可以确定是消息丢失的,丢失的消息就是缺少的序号。

大多数消息队列的客户端支持拦截器机制,在producer发送消息之前的拦截器中将序号注入到消息中,在consumer收到消息的拦截器中检测序号的连续性。这样消息检测的代码不会侵入到业务代码,等系统稳定后可以删除这部分逻辑。

对于Kafka和RocketMQ来说,不保证消息在topic上严格有序,但是保证在队列/分区上是有序的,所以我们发送消息时要指定分区,然后在分区上检测消息序号的连续性。

其次,consumer数量和分区数量一致比较容易对消息序号进行检测。


二、确保消息可靠传递

首先我们要知道什么时候可能会丢失消息,然后才能进行针对性的措施。

一条消息从生产到消费完成,分为如下三个阶段:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kkPQitJ6-1668600114767)(E:/Blog/lansg/source/img/image-20221110103120981.png)]

1.生产阶段

在该阶段,消息队列通过请求确认机制来保证消息的可靠传递

当producer给broker发送消息时,broker收到消息后会返回给客户端一个确认响应,表示消息已收到。只要producer收到了这个确认响应,就可以保证消息不会丢失。如果长时间没有收到响应会进行重发消息,如果一直失败则会返回一个异常或者返回值。

注意:要正确处理返回值或者捕获异常,才能完全保证消息不会丢失!如果是异步发送的话,需要在回调方法进行检查。


2.存储阶段

如果对消息的可靠性要求非常高,可以通过配置broker参数来避免因宕机而丢消息

  • 对于单节点的broker,需要配置参数使得将消息写入磁盘后再给producer返回确认响应。例如在RocketMQ中,将刷盘方式flushDiskType配置为SYNC_FLUSH同步刷盘。

  • 对于broker集群,需要配置为:至少将消息发送到两个以上的节点再返回确认响应

3.消费阶段

在该阶段,不要在收到消息后就立即发送消费确认,而是应该再执行完所有消费业务逻辑之后,再发送消费确认

客户端从broker拉取消息后,执行用户消费的业务逻辑,成功后再给broker发送消费确认响应。如果broker没有收到响应,下次拉取时还会拉取同一条消息。

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

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

相关文章

圆角矩形不是圆:圆角的画法和二阶连续性

本文中的所有重要图片都会给出基于Matplotlib的Python绘制代码以供参考 引言 如果在百度搜索圆角矩形的画法,那么多数结果都会告诉你,就是把一个普通矩形的拐角换成相切的 14\frac{1}{4}41​ 圆弧,就像 引文1 和 引文2 说的那样。然而&#x…

网络规划设计与综合布线技术详解

一、网络工程概述 1、计算机网络及其组成 计算机网络是现代通信技术与计算机技术相结合的产物。 随着计算机网络本身的发展,人们认为:计算机网络是把地理位置不同、功能独立自治的计算机系统及数据设备通过通信设备和线路连接起来,在功能完善的网络软件运行支持下,以实现…

springboot+vue实现excel的导出

首先是springboot对数据的处理 依赖的导入 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency>RequestMapping("/exportExcel") public R exportR…

【SpringBoot项目】SpringBoot项目-瑞吉外卖【day01】

文章目录前言软件开发整体介绍软件开发流程瑞吉外卖项目介绍项目介绍产品原型展示技术选型功能架构角色开发环境搭建数据库环境搭建maven项目搭建设置静态资源映射后台登录需求分析代码开发功能测试后台退出需求分析代码开发功能测试&#x1f315;博客x主页&#xff1a;己不由心…

JVS低代码如何实现复杂物料编码?

日常业务过程中&#xff0c;存在大量的编码&#xff0c;例如订单的流水号&#xff0c;复杂的物料编码&#xff0c;学生证号等等场景&#xff0c;那么通过JVS如何去实现各种编码&#xff1f; 为了让使用者使用尽量简单&#xff0c;我们编码分为简单配置的编码和复杂配置的编码。…

[附源码]java毕业设计家校通信息管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

docker stats查询容器状态显示异常有模线

docker stats 命令用来显示容器使用的系统资源。 默认情况下&#xff0c;stats 命令会每隔 1 秒钟刷新一次输出的内容直到你按下 ctrl c。 输出详情介绍&#xff1a; CONTAINER ID 与 NAME: 容器 ID 与名称。 CPU % 与 MEM %: 容器使用的 CPU 和内存的百分比。 MEM USAGE…

Java基础之《netty(1)—netty介绍》

一、介绍 1、netty是由JBOSS提供的一个java开源框架&#xff0c;现为github上的独立项目。 2、netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;可以快速开发高性能、高可靠的网络IO程序。 3、netty主要针对在TCP协议下&#xff0c;面向clients端的高并发应用&…

【python3】4.文件管理

2022.11.16 本学习内容总结于莫烦python:4.文件管理 https://mofanpy.com/tutorials/python-basic/interactive-python/read-write-file4 文件管理 4.1 读写文件 均是用特殊字符open 4.1.1 创建文件 f open("new_file.txt", "w") # 创建并打开 f.wr…

进入数字化供应链高潮期,与IBM咨询共创无边界竞争力

供应链领域的国际专家马丁克里斯托弗在30年前就提出“未来的竞争不再是企业和企业之间的竞争&#xff0c;而是供应链之间的竞争。”近几年来&#xff0c;基于工业4.0技术的供应链4.0开始进入业界的视野&#xff0c;2020年开始的疫情让全球供应链结束了长期稳定状态而进入VUCA&a…

针对谷氨酰胺运输体的小分子抑制剂

精准癌症治疗手段 在运输体水平靶向谷氨酰胺代谢 ACST2 蛋白是谷氨酰胺进入癌细胞的主要转运蛋白。在肺癌、乳腺癌、结肠癌等癌症中&#xff0c;ACST2 蛋白水平的上调与患者存活率有关。当抑制 ACST2 基因表达时&#xff0c;会显著抑制癌细胞生长。ASCT2 水平升高与多种癌症的…

【支付】支付安全

这里写目录标题1. 加密 - 对称加密与非对称加密1.1 对称加密1.2 非对称加密1.3 对称加密与非对称加密区别2. 身份认证公钥加密&#xff0c;私钥解密&#xff08;加密信息&#xff09;私钥加密&#xff0c;公钥解密&#xff08;身份认证&#xff09;3. 摘要算法与数据完整性3.1 …

深度剖析 Vue3 在浏览器的运行原理

上一讲我们学习了 Vue 响应式的大致原理&#xff0c;响应式就是可以把普通的 JavaScript 对象包裹成响应式对象&#xff0c;这样&#xff0c;我们对对象做的修改&#xff0c;响应式都能够监听到&#xff0c;并且执行 effect 内部注册的函数来执行数据修改之后的效果 那今天我就…

公司建网站多少钱?【网站多少钱】

很多公司成立初期会选择建一个公司网站&#xff0c;那么首先就会考虑公司建网站多少钱的问题。公司建网站多少钱会受到建网站方式的影响&#xff0c;不同方式费用不同&#xff0c;那么下面就说说公司建网站多少钱。 1、公司有团队&#xff0c;自己建 公司有技术团队的情况&am…

【FLASH存储器系列九】ONFI数据接口详述之二

目录 1.1 总线状态 1.2 ZQ校准 1.3 CE_n引脚缩减机制 1.4 差分信号 1.5 Warm up周期 1.6 从SDR到NV-LPDDR4的技术发展总结 1.1 总线状态 SDR 的总线状态&#xff1a; NV-DDR总线状态&#xff1a;值为11b的ALE/CLE 用于数据传输。总线状态在CLK的上升沿开始&#xff0c;持续…

最高效“双11”背后:圆通更不一样了

每年的“双11”都是一场看不见硝烟的战争&#xff0c;有人守着直播间抢货&#xff0c;也有人守着电脑追发货。 河南商丘大学城附近的某电商老板陈泽宇就是后者中的一员。每年“双11”他都高度紧张&#xff0c;提前许多天就开始备货&#xff0c;每天既要紧盯前台销量数字&#…

Leetcode 学习记录 数组与字符串

基础不牢&#xff0c;地动山摇。这句话就是描述我现在的阶段&#xff0c;虽然这些天在csdn的练习上进展还比较顺利&#xff0c;但是内心还是没有底的。实话说&#xff0c;csdn的练习题和leetcode上的比起来&#xff0c;还是真的相差很远。可能是不和口味吧。我还是比较喜欢Leet…

厉害了我们的“中国制造”,新能源“智造”强大到你想象不到

“中国制造”是近日的一大“热词”。 “中国制造”的新能源汽车花式“出海”&#xff0c;产销量连续7年位居全球首位&#xff1b;“中国制造”的过冬八件套反向海淘&#xff0c;订单暴增&#xff1b;“中国制造”的高铁首次全产业链“出海”…… 显而易见&#xff0c;当前是中国…

Unity导表工具Luban插件的数据加载原理与优化

文章目录1. 配置Luban并测试2. Luban 数据加载原理3. 根据工程进行懒加载优化3.1 增加公共接口与接口实现方法3.2 外部提供获取数据的方法3.3 对Luban中的导表模板进行修改4. 优化后测试如果初入坑&#xff0c;Luban配置可以参考宝鱼大佬的视频教程 强力配置工具luban使用教程【…

消除卡顿 mac MATLAB2022b m1/m2原生下载安装 教程

目录 1、版本说明 2、下载链接 2.1、百度网盘链接 2.2、官网下载链接 3、安装 1、版本说明 之前苦于安装matlab 2022b的Intel Rosetta转译版本&#xff0c;真的是明显感受到了卡顿&#xff0c;今天终于等到了2022b的原生版本&#xff0c;安装后占用10.09G内存。 ​​​​…