pilichoumao opened a new pull request, #4550: URL: https://github.com/apache/rocketmq-dashboard/pull/4550
### Which Issue(s) This PR Fixes Addresses the client-list gap described in the [maintainer review of #4062](https://github.com/apache/rocketmq-dashboard/pull/4062#issuecomment-5581511118). ### Brief Description With a gRPC or Remoting consumer connected through a cluster-mode Proxy, the Broker reports the group offline. The Studio client page previously omitted both consumers. `GET /api/clients?namesrvAddr=...` now merges Broker and Proxy connections, retaining directly connected consumers. - Reuse `ProxyConsumerResolver` heartbeat discovery and the selected pooled Admin client's existing connection query. Discover through the selected cluster's Brokers; cache discovery only within the request, and deduplicate connections across Brokers/Proxies. Both NameServer and instance entry points share this path. - The existing Proxy response does not identify the client protocol, and its integer version can be a compatibility value. Return null protocol/version and preserve reported language; render missing metadata as `-`. - Treat explicit offline responses as empty. Keep available rows with `partial=true` on lookup failures; an empty incomplete inventory is an error. Preserve interruption and propagate unexpected errors. #4544 remains open and addresses group-health availability. This change preserves its existing resolver APIs and does not implement its status model; its current patch applies cleanly over this diff. #2504 added group observability, while #4385 concerns lag; neither covers this client-list path. ### How Did You Test This Change? - Fail-before regression on `master@d50ffecc`: the real controller/service/provider chain returned 0 rows instead of the expected Proxy consumer. The updated tests also cover distinct NameServers, same-named groups across clusters, multiple Brokers/Proxies, missing metadata, offline/failure/partial responses and interruption. - Java 21, dependencies resolved into a fresh Maven repository: `mvn -B -ntp -Dspring.profiles.active=dev package` — **2,423 tests passed**, including architecture checks; **0 Checkstyle violations**, package successful. This uses the project's H2 development profile. The default MySQL profile cannot complete without local MySQL; clean master reproduces the application-context errors. - `npm test -- src/pages/cluster/__tests__/ClientsPage.test.tsx src/utils/clientConnectionDiagnostics.test.ts` — **26 passed**. `npm run build`, TypeScript and touched-file Prettier passed; full ESLint has **0 errors / 10 existing warnings**. `git diff --check` passed. - Real local Apache RocketMQ **5.5.0** NameServer/Broker/cluster-mode Proxy, Java gRPC SDK **5.0.7**, and **5.5.0** Remoting consumers: the stock baseline API omitted both Proxy consumer groups; the fixed API returns both plus the direct consumer. The configured default NameServer intentionally differs from the request's selection. Unrelated cluster filtering returns no rows; graceful gRPC shutdown removes that consumer; pausing the Proxy retains direct rows with `partial=true`, and resuming it restores the inventory. Not exercised against real multi-NameServer/multi-cluster deployments, ACL/TLS or MySQL. Discovery retains the existing heartbeat-syncer/default-remoting-port assumptions (8080); no new service, dependency, port or configuration is introduced. ### Checklist - [x] One coherent change; no unrelated modifications - [x] Conventional commit subject; regression tests use `...Test` - [x] New UI text includes Chinese and English - [x] Architecture and formatting checks pass - [x] API behavior documented; no new source files -- 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]
