yuluo-yx opened a new pull request, #4114: URL: https://github.com/apache/rocketmq-dashboard/pull/4114
## 变更目的 为超过事务回查次数而进入 `TRANS_CHECK_MAX_TIME_TOPIC` 的消息提供恢复回查流程。修复生产者故障后,管理员可以查看原 Topic、生产者组与旧回查次数,再确认让 Broker 重新请求业务事务检查;页面不把 Broker 接受等同于事务提交成功。 消息详情原先只显示客户端消息 ID。本项同时保留并展示原生物理 `offsetMsgId`,丢弃消息详情可将该 ID 直接带入恢复表单,形成可用的排障流程。 已检索全量 Issue/PR 中 resumeCheckHalf、half message、半消息、事务恢复等关键词;仅发现 #425 监控规则相关内容,在线 `resume transaction` 检索无同类功能。 ## 实现 - 管理员预览与提交接口绑定所选 Apache 实例,仅接受 32/56 位物理消息 ID。 - 复用 BrokerTopologyGuards 检查内嵌地址,再校验登记主节点、丢弃 Topic、返回地址、CommitLog 位点及原 Topic/生产者组。 - 提交重新验证源消息后调用 SDK `resumeCheckHalfMessage`,拒绝普通消息、未知地址和物理位置不匹配的结果。 - 保留中断、失败及审计语义;审计不包含正文,审计存储失败不将已接受操作误报为可重试失败。 - 增加输入变化后的预览失效、明确确认、提交锁定、实例切换后的迟到结果隔离,以及中文边界和回滚说明。 - 原 `msgId` 保留,新增可选物理 ID 字段;无新增依赖、配置或数据库字段。 依据官方 [DefaultTransactionalMessageCheckListener](https://github.com/apache/rocketmq/blob/rocketmq-all-5.5.0/broker/src/main/java/org/apache/rocketmq/broker/transaction/queue/DefaultTransactionalMessageCheckListener.java) 和 [AdminBrokerProcessor](https://github.com/apache/rocketmq/blob/rocketmq-all-5.5.0/broker/src/main/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java):恢复把丢弃消息重新写入半消息队列并重置检查次数,最终事务结果仍由生产者检查决定,原丢弃消息不会因此删除。 ## 本地验证 基线 `d6dee7d7ccfcf4886f02466ec51452a6928b2cc8`,Java 21、Node 24.18.0,2026-09-08。 ```bash cd server mvn -B -ntp org.jacoco:jacoco-maven-plugin:0.8.13:prepare-agent -Djacoco.destFile=target/transaction-recovery.exec -Djacoco.dataFile=target/transaction-recovery.exec -Dtest=TransactionRecoveryTest,RuntimeAdminClientResolverTest,RocketMQMessageProviderTest,AuthInterceptorTest,OperationAuditServiceTest verify org.jacoco:jacoco-maven-plugin:0.8.13:report cd ../web npx vitest run src/api/transactionRecovery.test.ts src/components/__tests__/TransactionRecoveryDialog.test.tsx src/pages/instance/__tests__/MessagePage.test.tsx src/pages/instance/__tests__/MessagePageAsyncState.test.tsx npm run build ``` - 后端 116 个测试通过,包括 20 个事务恢复场景、物理/客户端 ID 区分及新增权限检查;使用真实实例解析、客户端工厂和审计服务,底层 SDK 和存储使用 mock。 - 新恢复服务 JaCoCo 行覆盖率 48/48、分支 28/28,接口与记录覆盖率 100%;Checkstyle 零违规,打包通过。 - 前端 39 个测试通过,修改文件 ESLint、TypeScript 与 Vite 构建通过。 - 浏览器查询丢弃消息、打开详情、将物理 ID 自动带入、预览并确认恢复,两个精确本地 POST 均携带同一实例和物理 ID。脚本在操作前验证本地地址并明确拦截这两个 POST,其他非 GET 中止,没有真实 Broker 写入。 - `git diff --cached --check` 通过;16 个文件,1,075 行新增、2 行删除。 首次后端样本错误地用用户属性接口写系统属性,改用 SDK MessageAccessor 后通过。浏览器定位经过页面无障碍快照确认 Topic 必选及 AntD 下拉实际选项后完成,保留原查询成功提示的 AntD 静态上下文警告。 原样上游基线已有 3 个全量后端失败及依赖漏洞,本项无新增依赖、相关验证无新增失败;不将增量验证表述为项目级全量验收。真实集群 E2E、性能、压力、容量及混沌验证未执行。 操作期间应保持原 Broker 为主节点并确保生产者能回答检查。重复恢复可能增加回查请求,超时结果可能不确定,页面不自动重试。无迁移,直接部署,旧客户端可忽略新增字段。代码回滚移除接口与入口;已接受的恢复没有通用撤销命令,须依据生产者事务状态和消息记录处置。提交含 `[skip ci]`,验证在本地执行。 -- 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]
