yuluo-yx opened a new pull request, #4107:
URL: https://github.com/apache/rocketmq-dashboard/pull/4107

   ## 变更目的
   
   消息查询页增加定时消息撤回入口。管理员提供原生产者回执中的 `recallHandle`,检查目标 Topic、Broker、消息 ID 
和句柄时间,再显式确认撤回;结果显示 Broker 接收回执。
   
   已有 #1930 展示撤回轨迹事件,#2576 修复轨迹失败状态,均没有执行撤回操作。本项已检索历史 Issue/PR 的标题正文及在线 
`recall` 结果。
   
   ## 实现范围
   
   - 新增 `POST /api/messages/recall/preview` 和 `POST 
/api/messages/recall`;沿用现有管理员权限规则并增加对应权限测试。
   - 使用 SDK 的 `RecallMessageHandle` 解码器,校验请求 Topic 
与句柄目标一致,显示原始目标;检查阶段只解析实例与句柄,不创建 Producer 或写入标记。
   - 通过所选 Apache 实例的 Producer 池调用 
`recallMessage`,不回落到默认实例;空回执不报成功,异常与中断保留现有处理语义。
   - 记录 `RECALL_DELAY_MESSAGE` 成功/失败审计,包含目标字段且不记录完整句柄;审计存储失败不改变已接受操作的返回结果。
   - 增加检查、确认、目标变更失效、提交锁定、迟到响应隔离和成功消息 ID 展示;Mock/云实例禁用入口。
   - 新增中文操作、协议与回滚边界说明,无新增依赖或持久化模型。
   
   官方 
[RecallMessageProcessor](https://github.com/apache/rocketmq/blob/rocketmq-all-5.5.0/broker/src/main/java/org/apache/rocketmq/broker/processor/RecallMessageProcessor.java)
 通过写入定时删除标记处理撤回。因此界面只报告“Broker accepted the recall 
request”,不宣称撤回了已经投递的消息,也不将成功响应视为对最终投递状态的独立证明。
   
   ## 本地验证
   
   基线 `d6dee7d7ccfcf4886f02466ec51452a6928b2cc8`,Java 21、Node 
24.18.0,2026-09-08。
   
   ```bash
   cd server
   mvn -B -ntp 
-Dtest=DelayMessageRecallTest,RuntimeAdminClientResolverTest,AuthInterceptorTest,OperationAuditServiceTest
 verify
   cd ../web
   npx vitest run src/api/messageRecall.test.ts 
src/components/__tests__/DelayMessageRecallDialog.test.tsx 
src/pages/instance/__tests__/MessagePage.test.tsx 
src/pages/instance/__tests__/MessagePageAsyncState.test.tsx
   npm run build
   ```
   
   - 后端 73 个测试通过,包含 19 个新增撤回场景与 2 个新增权限场景;HTTP 到真实实例解析/客户端池链路只模拟 SDK 连接,未连接真实 
Broker。
   - 新增服务 JaCoCo 行覆盖率 28/28(100%)、分支 12/14,Controller 两个入口覆盖;Checkstyle、打包通过。
   - 前端 38 个测试通过,TypeScript、Vite、修改文件 ESLint 通过。
   - 本地 Playwright 验证入口、检查与确认发送相同的实例/Topic/句柄、显示接受回执并禁用再次确认;每次涉及提交的浏览器脚本都先拦截所有非 
GET,只对两个精确本地接口返回受控结果,无真实撤回操作。
   - `git diff --check` 通过;13 个文件,972 行新增、2 行删除,合计 974 行。
   
   原样上游基线已有 3 个全量后端失败(AuthCorsIntegrationTest 两项、AliyunInstanceProviderTest 
一项)与依赖漏洞。本 PR 无新增依赖,相关验证无新增失败,不将增量验证表述为项目级全量验收。真实集群 E2E、性能、压力、容量及混沌验证未执行。
   
   Broker 必须支持并允许定时消息撤回。旧延迟等级消息与已投递消息不能据此撤销;Broker 
保留最终时间与权限判断。超时可能产生不确定结果,页面不自动重试。
   
   无迁移,直接部署;回滚该提交可移除接口与入口,但不能撤销 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]

Reply via email to