unbridled-41 opened a new pull request, #4271:
URL: https://github.com/apache/rocketmq-dashboard/pull/4271

   Fixes #4270.
   
   ## Source
   
   - 父项目(master 
经典版)消息详情弹窗展示重投次数:`frontend-new/src/components/MessageDetailViewDialog.jsx` L120 
—— `ReconsumeTimes`(`git show origin/master:` 亲验)。
   - 数据语义:MessageExt 的 reconsumeTimes 即消费组重投次数(rocketmq-common 5.5.0 
`MessageExt.getReconsumeTimes()`,javap 字节码亲验);未重投为 0。
   
   ## Current gap
   
   Studio 消息详情弹窗不显示重投次数。消息轨迹 Tab 有"重试次数"列,但仅对开启轨迹的 Topic 有效,且 Apache provider 
构建轨迹消费状态时该值当前恒为 0(RocketMQMessageProvider:628/669 硬编码)——普通消息没有任何途径看到真实重投历史。后端 
`toRecordVO` 是按 Topic/按 Key/按 msgId/队列浏览全部查询路径的统一 VO 映射点,已持有 MessageExt 却未映射该字段。
   
   ## Project fit
   
   最小实现:一个 VO 字段 + 一处映射 + 一行展示。与同族展示(Broker/Queue/Offset 存储位置 #4267、DLQ 重投次数 
#4269)共同补齐消息元数据面板,属于同一数据已备、UI 缺渲染的缺口族。
   
   ## Scope
   
   - 包含:`MessageRecordVO.reconsumeTimes`、`RocketMQMessageProvider.toRecordVO` 
填充、消息详情弹窗"重投次数"项、TS 类型(可选字段)。
   - 不包含:轨迹 retryCount 硬编码 0 的修复(属缺陷修复,另行评估)、消息列表加列、云厂商 provider 映射(其 VO 走 
builder 缺省 0,与 queueId(0) 先例一致)。
   
   ## Implementation
   
   - `server/.../instance/message/MessageRecordVO.java`:新增 `private int 
reconsumeTimes;`(storeHost 之后)。
   - `server/.../provider/apache/RocketMQMessageProvider.java`:`toRecordVO` 增加 
`.reconsumeTimes(messageExt.getReconsumeTimes())`。
   - `web/src/api/message.ts`:`MessageRecord` 新增可选 `reconsumeTimes`。
   - `web/src/pages/instance/message.tsx`:详情 Descriptions 在"大小"后新增"重投次数"项(`?? 
'-'` 占位)。
   
   ## Tests
   
   - 后端新回归 
`toRecordVOCarriesReconsumeTimes`(RocketMQMessageProviderTest):`setReconsumeTimes(4)`
 → 断言 VO `getReconsumeTimes()==4`。
     - 红灯:`mvn -o -q test-compile` → `cannot find symbol`(test :502)。
     - 绿灯:`RocketMQMessageProviderTest 42/42`(41 基线 + 1 新增)。
   - 前端新回归 `shows the redelivery count on the message detail 
panel`(MessagePage.test.tsx):详情面板断言"重投次数"行渲染 2。
     - 红灯:`Tests 1 failed | 10 passed (11)`(Unable to find 重投次数)。
     - 绿灯:`Tests 11 passed (11)`;提交后复跑 11/11。
   - 全量后端:`mvn -o clean test` → `2152 tests, failures=3`(= pristine 2151 + 1 
新增;AuthCorsIntegrationTest ×2 为基线逐字;OpenAiCompatibleLlmGatewayTest ×1 
为已知负载脆弱用例,隔离复跑 10/10 全过,零新增失败)。
   - 全量 web:`npx vitest run` → `982 tests (981 pristine + 1 新增), 3 failed | 979 
passed`;失败为 MetricsExplorer 1 + ConsumerPage 1 + TopicPage 
1(均未触碰文件的已知负载脆弱族,三文件隔离复跑 79/79 全过)。
   - `npx tsc -b` exit 0;`npx eslint`(3 个改动文件)0 问题;`npm run build` ✓(8.99s)。
   
   ## Compatibility & Risk
   
   - `MessageRecordVO` 加字段向后兼容(响应新增键);TS 可选不破坏 mock/旧响应。
   - 云厂商(Aliyun/Tencent)路径 VO 缺省 0:与既有 `queueId(0)` 先例语义一致,在 PR 范围声明中如实标注。
   - 与 #4267(存储位置)同弹窗不同 hunk:本 PR 的行插入在"大小"后,#4267 在"存储时间"后,文本冲突面最小。
   - 风险极低:展示层追加 + 单字段映射。
   
   ## Diff
   
   6 files, +42/−0(numstat:MessageRecordVO.java +1、RocketMQMessageProvider.java 
+1、RocketMQMessageProviderTest.java +12、api/message.ts +1、MessagePage.test.tsx 
+24、message.tsx +3)。head: 90814370。
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to