feat(kafka): support Kafka MQ admin client

This commit is contained in:
miracle authored and GitHub committed 2026-06-30 17:01:24 +08:00
1 parent 3e7cf30ce5
commit 7cec4892bf
43 files changed
+4281 -186

No files matched your search

+30 -12
View File
@@ -1589,18 +1589,36 @@ export const useConnectionStore = defineStore("connection", () => {
await ensureConnected(connectionId);
if (useCachedChildren(node, options)) return;
const tenants = await withMetadataLoadTimeout(connectionId, api.mqListTenants(connectionId), "message queue tenants");
const tenantNames = sortSidebarNames(tenants.map((tenant) => tenant.name).filter((name) => !!name.trim()));
setChildren(
node,
tenantNames.map((tenant) => ({
id: schemaCacheKey(connectionId, "mq-tenant", tenant),
label: tenant,
type: "mq-tenant" as const,
connectionId,
mqTenant: tenant,
})),
);
const config = getConfig(connectionId);
const isKafka = config?.driver_profile === "kafka";
if (isKafka) {
// Kafka has no tenant/namespace concept. Create a synthetic child
// that opens the MQ admin console directly when clicked.
setChildren(node, [
{
id: schemaCacheKey(connectionId, "mq-tenant", "_kafka"),
label: "Topics",
type: "mq-tenant" as const,
connectionId,
mqTenant: "_kafka",
mqInitialTab: "topics",
},
]);
} else {
const tenants = await withMetadataLoadTimeout(connectionId, api.mqListTenants(connectionId), "message queue tenants");
const tenantNames = sortSidebarNames(tenants.map((tenant) => tenant.name).filter((name) => !!name.trim()));
setChildren(
node,
tenantNames.map((tenant) => ({
id: schemaCacheKey(connectionId, "mq-tenant", tenant),
label: tenant,
type: "mq-tenant" as const,
connectionId,
mqTenant: tenant,
})),
);
}
node.isExpanded = true;
} catch (e) {
recordMetadataLoadError(connectionId, e);
+4 -1
View File
@@ -684,10 +684,11 @@ export const useQueryStore = defineStore("query", () => {
return id;
}
function openMqAdmin(connectionId: string, target?: { tenant?: string }) {
function openMqAdmin(connectionId: string, target?: { tenant?: string; initialTab?: QueryTab["mqInitialTab"] }) {
const existing = tabs.value.find((tab) => tab.mode === "mq" && tab.connectionId === connectionId);
if (existing) {
if (target?.tenant) existing.mqTenant = target.tenant;
if (target?.initialTab) existing.mqInitialTab = target.initialTab;
activeTabId.value = existing.id;
return existing.id;
}
@@ -705,6 +706,7 @@ export const useQueryStore = defineStore("query", () => {
isExplaining: false,
mode: "mq",
mqTenant: target?.tenant,
mqInitialTab: target?.initialTab,
};
tabs.value.push(tab);
activeTabId.value = id;
@@ -910,6 +912,7 @@ export const useQueryStore = defineStore("query", () => {
explainExecutionId: undefined,
mode: original.mode,
mqTenant: original.mqTenant,
mqInitialTab: original.mqInitialTab,
nacosNamespace: original.nacosNamespace,
nacosNamespaceName: original.nacosNamespaceName,
structureTableName: original.structureTableName,