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

   ## 变更目的
   
   在现有队列浏览中增加消费过滤预览,帮助排查“队列里有消息,但消费者的 TAG/SQL92 过滤器没有匹配”的问题。
   
   点击队列行的 `Filter`,从当前 offset 开始使用 Broker 
原生过滤器读取一批匹配消息,展开查看消息体和业务属性。空批次仍保留继续位置,用户可以显式读取下一批。
   
   ## 实现范围
   
   - 新增只读 `GET /api/messages/queue-filter-preview`,校验实例、队列、非负 offset 和 
TAG/SQL92 表达式。
   - 通过实例绑定的 Apache pull 客户端读取路由与边界,每次最多执行一次 20 条、3 秒 pull;不自动扫描整条队列,不提交消费位点。
   - 返回起点、下一位置、可读范围和位置调整标志,正确处理 `NO_MATCHED_MSG`、`NO_NEW_MSG`、`OFFSET_ILLEGAL` 
与 Broker 过滤拒绝。
   - 新增队列入口与预览面板:表达式输入、起始位置、显式下一批、消息体/属性展开、截断提示,以及关闭时的请求取消。
   - 修改表达式或起点会清除旧继续位置;Broker 拒绝 SQL92 时不降级为无过滤查询。
   - 新增中文操作、协议、超时和回滚说明。
   
   已核对 #3314 的订阅一致性/规则冲突诊断,以及 #3360、#3349 的云端过滤模式展示;它们不提供基于实际队列消息的原生过滤预览。本 PR 
没有另建订阅模型或客户端 SQL 解释器。
   
   协议依据:[RocketMQ 5.5.0 
DefaultMQPullConsumerImpl](https://github.com/apache/rocketmq/blob/rocketmq-all-5.5.0/client/src/main/java/org/apache/rocketmq/client/impl/consumer/DefaultMQPullConsumerImpl.java)
 的 `MessageSelector` 同步 pull 路径。
   
   ## 本地验证
   
   基线 `d6dee7d7ccfcf4886f02466ec51452a6928b2cc8`,Java 21、Node 
24.18.0,2026-09-08。
   
   ```bash
   cd server
   mvn -B -ntp 
-Dtest=QueueFilterPreviewTest,RocketMQMessageProviderTest,MessageServiceTest,MessageControllerTest
 verify
   cd ../web
   npx vitest run src/components/__tests__/QueueFilterPreview.test.tsx 
src/components/__tests__/QueueBrowser.test.tsx src/api/message.test.ts 
src/pages/instance/__tests__/MessagePageAsyncState.test.tsx 
src/pages/instance/__tests__/MessagePage.test.tsx
   npm run build
   ```
   
   - 后端 80 个测试通过,包含 16 个新增 HTTP/服务/Provider 组合用例;Checkstyle 和打包通过。
   - JaCoCo:新增 Provider 预览路径行覆盖率 35/37(94.6%),分支 28/42;Controller 与 Service 
委托均覆盖。
   - 前端 50 个测试通过;TypeScript 和 Vite 构建通过,修改文件 ESLint 0 错误,仅保留 QueueBrowser 原有两个 
Fast Refresh 警告。
   - Playwright 使用真实本地页面及受控 GET 响应,验证 SQL92 表达式和 offset 10 被正确发送、空匹配批次可继续到 
offset 50、下一批详情显示消息体和属性、到达末尾后禁用继续按钮。没有连接真实集群。
   - `git diff --check` 通过;14 个文件,936 行新增、8 行删除,共 944 行。
   
   同一原样上游基线已有 3 个全量后端失败(AuthCorsIntegrationTest 两项、AliyunInstanceProviderTest 
一项)和依赖漏洞。本 PR 无新增依赖,相关验证无新增失败;不把增量验证称为项目级全量验收。未执行真实集群 E2E、压力、容量或混沌验证。
   
   SQL92 需要 Broker 属性过滤支持;路由/边界读取有各自 SDK 超时,3 秒是单次 pull 超时,不是整个 HTTP 
请求总超时。浏览器取消也不保证已经开始的 Broker RPC 立即终止。
   
   无迁移,直接替换;没有新增配置或数据库字段。回滚本提交即可,无需调整消费组状态。提交含 `[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