京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

RocketMQ Dashboard 消息重复问题排查与修复

2026-6-27 00:23| 发布者: zhaojun917| 查看: 5| 评论: 0

摘要: 版本:rocketmq-dashboard-2.0.0-source-release1. 消息重复问题描述用 RocketMQMQ 生产者发送消息,发送一条消息,通过 Dashboard 的 “消息” 页面 “搜索”,显示两条消息,并且两条消息的 Message ID 是相同的。 ...
 版本:rocketmq-dashboard-2.0.0-source-release
https://gitcode.com/gh_mirrors/ro/rocketmq-dashboard?utm_source=highlight_word_gitcode&word=rocketmq+dashboard&from_link=03f147cd097822b8b372e036c546ffff
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已经修复了。


————————————————
版权声明:本文为CSDN博主「宋冠巡」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sgx1825192/article/details/151805094

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2026-6-27 02:13 , Processed in 0.080351 second(s), 17 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

返回顶部