RocketMQ—RocketMQ消息重复消费问题

RocketMQ—RocketMQ消息重复消费问题

重复消费问题的描述

什么情况下会发生重复消费的问题:

  1. 生产者多次投递消息:如果生产者发送消息时,连接有延迟,MQ还没收到消息,生产者又发送了一次消息;

  2. 消费者方扩容时会重试:

    topic中有四个queue,queue2中有一个消息MSG,如果此时只有一个消费者,MSG就会被被consumer1获取到;

    第1步

    但是consumer1获取到消息时,位点还没来得及前移,又有了一个消费者Consumer2,这样就会产生重平衡;

    第二步

    Consumer1消费0和1队列,Consumer2消费2和3队列,因为上一步的消息还没消费成功,所以会给Consumer2一份消息,这样就会产生重复消费的问题。

重复消费问题的解决方案

一般情况下,我们会在消费者端解决重复消费的问题,消费者端需要进行去重,去重关键点就是要找到消息的唯一标记,所以我们在发送消息时会带有一个key,消费者拿到相同的key就不进行操作了。(一般使用redis存储消费过的key,或者使用mysql存储消费记录,把key设置成唯一索引。)

mysql解决方案

简单建一个去重表,有id,key两个字段,key设置唯一索引。

错误做法
if(key存在){直接返回;
}
执行业务逻辑。
插入key记录到MySQL;

这样做是不正确的,因为不能保证并发安全,如果有两个线程同时进来,这样都会查不到这个key,都会执行消费的逻辑。

正确做法
try{插入key记录到MySQL;//MySQL唯一索引内部会保证唯一
}catch (SQLException e) {if (e instanceof SQLIntegrityConstraintViolationException) {// 唯一索引冲突异常// 说明消息来过了记录日志;return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}其他错误依然会报错,会重新投递到消息队列;
}
处理业务逻辑
如果业务报错 则删除掉这个去重表记录
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;

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

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

相关文章

Docker命令实战

文章目录 一、Docker常用命令-图谱二、基础实战命令2.1、查找镜像2.2、启动容器2.3、修改容器内容2.3.1、进入容器内部修改2.3.2、挂载数据到外部修改 2.4、提交改变2.5、镜像传输--将镜像保存成压缩包2.6、两台主机间压缩文件的传输拷贝2.7、推送阿里云个人远程镜像仓库2.8、其…

SQL110 插入记录(一)(插入和interval关键字的用法)

代码 insert into exam_record(uid,exam_id,start_time,submit_time,score) values(1001,9001,2021-09-01 22:11:12,2021-09-01 22:11:12interval 50 minute,90), (1002,9002,2021-09-04 07:01:02,null,null)知识点 interval关键字的用法 INTERVAL关键字一般使用格式为&#x…

一篇博客教会你使用node多版本管理

文章目录 nvm 简介nvm 安装nvm 使用配置国内镜像显示可以安装的 nodejs安装 nodejs显示已安装的 nodejs切换 nodejs nvm 简介 nvm(Node Version Manager)是 node.js 的版本管理器,可以让我们轻松地在不同的 node.js 版本之间进行切换。 今天…

c语言(指针进阶)

指针 一.什么是字符指针二.使用指针数组模拟二维数组三.函数指针 一.什么是字符指针 字符指针:指向字符型数据的指针变量。每个字符串在内存中都占用一段连续的存储空间,并有唯一确定的首地址。即将字符串的首地址赋值给字符指针,可让字符指针…

树和堆的精讲

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…

告别你的朝九晚五的工作。

告别你的朝九晚五的工作。 以下是6个网站,你可以从任何地方获得100美元到2000美元的报酬: (第3个网站最正规) 1. Honeygain 分享未使用的互联网带宽换取现金。 功能包括推荐系统、JumpTask模式、成就和每日幸运抽奖。 非常适…

机构如何搭建一个在线课程教学平台?

随着数字化教育的兴起,越来越多的教育机构开始考虑建立自己的在线课程教学平台。这一趋势不仅顺应了时代的发展,而且为教育行业带来了诸多便利和优势。构建一个在线教学平台可以帮助机构拓宽服务范围、提升教学质量、增强学生体验,并且能够有…

optuna,一个好用的Python机器学习自动化超参数优化库

🏷️个人主页:鼠鼠我捏,要死了捏的主页 🏷️付费专栏:Python专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 前言 超参数优化是机器学习中的重要问题,它涉及在训练模型时选择最优的超参数组合,以提高模型的性能和泛化能力。Optuna是一个用于自动化超参数优化的…

美容小程序:让预约更简单,服务更贴心

在当今繁忙的生活节奏中,美容预约常常令人感到繁琐和疲惫。为了解决这个问题,许多美容院和SPA中心已经开始采用美容小程序来简化预约流程,并提供更加贴心的服务。在这篇文章中,我们将引导您了解如何制作一个美容小程序&#xff0c…

2024 年 2 月 TIOBE 指数:最流行的 10 种编程语言

Go 进入了 TIOBE 指数的前 10 名,这是谷歌编程语言有史以来的最高位置。 在 2024 年 2 月的 TIOBE 软件最受欢迎的编程语言列表中,Python、C 和 C 保持了它们的领先地位(图 A)。TIOBE 的专有积分系统考虑了根据多种大型搜索引擎&…

Tailscale实现内网穿透、异地组网、远程访问

文章目录 Tailscale简介主要功能适用场景使用Tailscale的优势如何开始使用Tailscale总结参考资料注册登录Tailscale账号并下载客户端禁用秘钥过期简单使用设备添加 - 组网Linux安装Tailscale,实现设备添加Tailscale 中的 DERP 简介什么是 DERP?DERP 的优势DERP 的工作原理DER…

初识KMP算法

目录 1.KMP算法的介绍 2.next数组 3.总结 1.KMP算法的介绍 首先我们会疑惑,什么是KMP算法?这个算法是用来干什么的? KMP(Knuth-Morris-Pratt)算法是一种用于字符串匹配的经典算法,它的目标是在一个主文本…

MySQL数据库基础(七):DDL数据表操作

文章目录 DDL数据表操作 一、数据表的基本操作 1、数据表的创建 2、查询已创建数据表 3、修改数据表信息 ① 数据表字段添加 ② 修改字段名称或字段类型 ③ 删除某个字段 ④ 修改数据表名称 4、删除数据表 二、字段类型详解 1、整数类型 2、浮点类型 3、日期类型…

机器学习入门--门控循环单元(GRU)原理与实践

GRU模型 随着深度学习领域的快速发展,循环神经网络(RNN)已成为自然语言处理(NLP)等领域中常用的模型之一。但是,在RNN中,如果时间步数较大,会导致梯度消失或爆炸的问题,…

蓝桥杯嵌入式STM32G431RBT6知识点(主观题部分)

目录 1 前置准备 1.1 Keil 1.1.1 编译器版本及微库 1.1.2 添加官方提供的LCD及I2C文件 1.2 CubeMX 1.2.1 时钟树 1.2.2 其他 1.2.3 明确CubeMX路径,放置芯片包 2 GPIO 2.1 实验1:LED1-LED8循环亮灭 ​编辑 2.2 实验2&#xff1a…

Gitlab CI/CD docker命令报错:/usr/bin/bash: line 136: docker:command not found

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

深入实战:ElasticSearch的Rest API与迭代器模式在高效查询中的应用

在我们公司,大多数Java开发工程师在项目中都有使用Elasticsearch的经验。通常,他们会通过引入第三方工具包或使用Elasticsearch Client等方式来进行数据查询。然而,当涉及到基于Elasticsearch Rest API的/_sql?formatjson接口时,…

2 物理层(三):数据传输的方式,同步传输和异步传输

目录 1 数据的传输方式1.1 并行传输1.2 串行传输 2 同步传输和异步传输2.1 同步传输2.2 异步传输2.3 同步和异步传输对比 1 数据的传输方式 在数据通信中,数据传输方式有并行传输和串行传输两种 1.1 并行传输 定义:并行传输是指数据以成组的方式在多个…

NC 输出模板自定义变量使用加减乘除余等公式计算时无法显示结果的问题处理办法

NC 输出模板自定义变量使用加减乘除余等公式计算时无法显示结果的问题处理办法 比如,求两个字段的差,如果这样写,模板打印输出的时候,是不会显示有值的: sub(vouchercreditamount, voucherdebitamount) 或者 voucherc…

picker选择器-年月日选择

从底部弹起的滚动选择器。支持五种选择器,通过mode来区分,分别是普通选择器,多列选择器,时间选择器,日期选择器,省市区选择器,默认是普通选择器。 学习一下日期选择器 平台差异说明 日期选择默…