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

RocketMQ Dashboard 消息重复问题排查与修复(rocketmq-dashboard-2.0.0-source-release)

消息重复问题排查与修复

版本:rocketmq-dashboard-2.0.0-source-release

1. 消息重复问题描述

用 RocketMQMQ 生产者发送消息,发送一条消息,通过 Dashboard 的 “消息” 页面 “搜索”,显示两条消息,并且两条消息的 Message ID 是相同的。

1.1. 消息重复示例

1.2. 消息搜索接口的请求和响应

接口请求:

curl 'http://localhost:8080/message/queryMessagePageByTopic.query' \-H 'Accept: application/json, text/plain, */*' \-H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' \-H 'Cache-Control: no-cache' \-H 'Connection: keep-alive' \-H 'Content-Type: application/json;charset=UTF-8' \-b 'Idea-1cf71e24=46729fe7-bf13-4272-8379-df12bc6e308f; NG_TRANSLATE_LANG_KEY=%22zh%22' \-H 'Origin: http://localhost:8080' \-H 'Pragma: no-cache' \-H 'Referer: http://localhost:8080/' \-H 'Sec-Fetch-Dest: empty' \-H 'Sec-Fetch-Mode: cors' \-H 'Sec-Fetch-Site: same-origin' \-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0' \-H 'sec-ch-ua: "Chromium";v="140", "Not=A?Brand";v="24", "Microsoft Edge";v="140"' \-H 'sec-ch-ua-mobile: ?0' \-H 'sec-ch-ua-platform: "Windows"' \--data-raw '{"topic":"test-topic-4","begin":1735735080000,"end":1758123480000,"pageNum":1,"pageSize":20,"taskId":"A9FEED5B2E6836BAF30C5778902B0000"}'

接口响应,content 列表中包含 msgId 相同的对象:

{"status": 0,"data": {"page": {"content": [{"queueId": 6,"storeSize": 331,"queueOffset": 0,"sysFlag": 0,"bornTimestamp": 1756052661892,"bornHost": "192.168.56.1:51548","storeTimestamp": 1756052661982,"storeHost": "192.168.56.1:10911","msgId": "A9FEED5B07D436BAF30C7BAEEE820000","commitLogOffset": 1848,"bodyCRC": 1816839120,"reconsumeTimes": 0,"preparedTransactionOffset": 0,"topic": "test-topic-4","flag": 0,"properties": {"MSG_REGION": "DefaultRegion","id": "184dfa8f-d04c-6516-bbcf-66715dc274c6","UNIQ_KEY": "A9FEED5B07D436BAF30C7BAEEE820000","CLUSTER": "DefaultCluster","contentType": "text/plain;charset=UTF-8","MIN_OFFSET": "0","WAIT": "true","timestamp": "1756052661081","TRACE_ON": "true","MAX_OFFSET": "1"},"messageBody": "Hello, World!"},{"queueId": 6,"storeSize": 331,"queueOffset": 0,"sysFlag": 0,"bornTimestamp": 1756052661892,"bornHost": "192.168.56.1:51548","storeTimestamp": 1756052661982,"storeHost": "192.168.56.1:10911","msgId": "A9FEED5B07D436BAF30C7BAEEE820000","commitLogOffset": 1848,"bodyCRC": 1816839120,"reconsumeTimes": 0,"preparedTransactionOffset": 0,"topic": "test-topic-4","flag": 0,"properties": {"MSG_REGION": "DefaultRegion","id": "184dfa8f-d04c-6516-bbcf-66715dc274c6","UNIQ_KEY": "A9FEED5B07D436BAF30C7BAEEE820000","CLUSTER": "DefaultCluster","contentType": "text/plain;charset=UTF-8","MIN_OFFSET": "0","WAIT": "true","timestamp": "1756052661081","TRACE_ON": "true","MAX_OFFSET": "1"},"messageBody": "Hello, World!"},{"queueId": 4,"storeSize": 331,"queueOffset": 0,"sysFlag": 0,"bornTimestamp": 1756051562107,"bornHost": "192.168.56.1:51227","storeTimestamp": 1756051562178,"storeHost": "192.168.56.1:10911","msgId": "A9FEED5B3F9436BAF30C7B9E26790000","commitLogOffset": 1517,"bodyCRC": 1816839120,"reconsumeTimes": 0,"preparedTransactionOffset": 0,"topic": "test-topic-4","flag": 0,"properties": {"MSG_REGION": "DefaultRegion","id": "efbe275d-0298-8bed-919b-de92b53e4e9e","UNIQ_KEY": "A9FEED5B3F9436BAF30C7B9E26790000","CLUSTER": "DefaultCluster","contentType": "text/plain;charset=UTF-8","MIN_OFFSET": "0","WAIT": "true","timestamp": "1756051561125","TRACE_ON": "true","MAX_OFFSET": "1"},"messageBody": "Hello, World!"},{"queueId": 4,"storeSize": 331,"queueOffset": 0,"sysFlag": 0,"bornTimestamp": 1756051562107,"bornHost": "192.168.56.1:51227","storeTimestamp": 1756051562178,"storeHost": "192.168.56.1:10911","msgId": "A9FEED5B3F9436BAF30C7B9E26790000","commitLogOffset": 1517,"bodyCRC": 1816839120,"reconsumeTimes": 0,"preparedTransactionOffset": 0,"topic": "test-topic-4","flag": 0,"properties": {"MSG_REGION": "DefaultRegion","id": "efbe275d-0298-8bed-919b-de92b53e4e9e","UNIQ_KEY": "A9FEED5B3F9436BAF30C7B9E26790000","CLUSTER": "DefaultCluster","contentType": "text/plain;charset=UTF-8","MIN_OFFSET": "0","WAIT": "true","timestamp": "1756051561125","TRACE_ON": "true","MAX_OFFSET": "1"},"messageBody": "Hello, World!"}],"pageable": {"sort": {"sorted": false,"unsorted": true,"empty": true},"offset": 0,"pageNumber": 0,"pageSize": 20,"paged": true,"unpaged": false},"totalElements": 4,"totalPages": 1,"last": true,"size": 20,"number": 0,"sort": {"sorted": false,"unsorted": true,"empty": true},"first": true,"numberOfElements": 4,"empty": false},"taskId": "A9FEED5B2E6836BAF30C5778902B0000"},"errMsg": null
}

2. 问题原因:Dashboard 漏洞

问题原因:Dashboard漏洞,需要通过改代码修复

参考资料:

《RocketMQ查询出重复数据,两条MessageID一样的解决办法如下》:
https://blog.csdn.net/weixin_44853310/article/details/139594123

《RocketMQ中dashboard 怎么显示2条一样的消息。是配置问题?》
https://developer.aliyun.com/ask/543579

3. 修复方法

修改下面方法中的漏洞,修改方案如下:

org.apache.rocketmq.dashboard.service.impl.MessageServiceImpl#queryFirstMessagePage

   // 去掉 + 1 ,避免消息重复// Long maxOffset = consumer.searchOffset(messageQueue, query.getEnd()) + 1;Long maxOffset = consumer.searchOffset(messageQueue, query.getEnd());

修改示例:

4. 修复效果:消息不再重复

5. 最新版代码中已修复

在 RocketMQ Dashboard 代码的最新版本中,这个Bug已经修复了。

http://www.dtcms.com/a/389046.html

相关文章:

  • 卓伊凡的第一款独立游戏-详细介绍游戏开发引擎unity-以及详细介绍windows和mac的安装步骤【01】
  • 多表联合查询
  • Day26_【深度学习(6)_神经网络NN(1中)激活函数_softmax详解篇】
  • 黑盒测试:测试用例设计之等价类设计方法(等价类划分:Equivalence Partitioning)有效等价类、无效等价类、边界值分析
  • 22 C++11 初始化新姿势:{} 统一初始化(省等号)+initializer_list 底层解析
  • 黑马头条_SpringCloud项目阶段二:FreeMarker组件以及MinIO系统集成
  • MySQL 数据库基础操作指南:从创建管理到备份恢复全解析
  • 【Java】-- rjvm 项目分析
  • Markdown 常用语法参考
  • 11.2.3 固定话题聊天实现
  • CAN(控制器局域网)工业协议教学文档(一)
  • PHP基础-变量与常量(第八天)
  • SQ01,SQ02,SQ03,SE93事务码配置
  • AI提示词Excel 表格提取数据准确度处理
  • DeviceNet 转 EtherNet/IP 实现罗克韦尔 PLC 与库卡机器人在汽车白车身焊接的微秒级数据同步协作案例
  • GPT-5 vs Gemini 2.5 Pro:两大AI旗舰模型深度技术对比
  • 31、GPT核心引擎完整手工构建:从算法原理到工程优化(Generative Pre-trained Transformer)
  • MySQL MHA 完整配置与故障后原主库还原指南
  • 栈-946.验证栈序列-力扣(LeetCode)
  • spring boot3.0整合rabbitmq3.13
  • Scrapy爬虫利器:CrawlSpider详解
  • 从零开始学Flink:数据源
  • GRPO算法复现
  • AI+Flask博客项目实战提示词笔记 20250918
  • 无人设备遥控器之时间戳技术篇
  • 模块四 展望微服务
  • RN 添加 <NavigationContainer>组件报错
  • 深入理解 AVL 树
  • 软考中级习题与解答——第八章_计算机网络(2)
  • FinalShell远程连接CentOS下方文件列表信息不显示且刷新报空指针异常