feat(rocketmq): improve connections, topics, and message queries

This commit is contained in:
AiLi authored and GitHub committed 2026-08-04 01:38:29 +08:00
1 parent 0ece86c478
commit ce7b8c7b74
22 files changed
+1166 -407

No files matched your search

+11 -18
View File
@@ -485,7 +485,7 @@ mod tests {
let initial = mq_config("mq-conn", "http://127.0.0.1:8080");
state.configs.write().await.insert(initial.id.clone(), initial.clone());
state.connections.write().await.insert(initial.id.clone(), PoolKind::MessageQueue);
let first = state.mq_registry.get_or_build(&initial).await.unwrap();
let first = state.mq_registry.get_or_build(&initial).await.unwrap().adapter;
let updated = mq_config("mq-conn", "http://127.0.0.1:8081");
save_connection_configs(&state, std::slice::from_ref(&updated)).await.unwrap();
@@ -501,7 +501,7 @@ mod tests {
.map(str::to_string);
assert_eq!(cached_admin_url.as_deref(), Some("http://127.0.0.1:8081"));
let second = state.mq_registry.get_or_build(&updated).await.unwrap();
let second = state.mq_registry.get_or_build(&updated).await.unwrap().adapter;
assert!(!std::sync::Arc::ptr_eq(&first, &second));
assert!(!state.connections.read().await.contains_key(&initial.id));
@@ -553,7 +553,7 @@ mod tests {
configs.insert(kept.id.clone(), kept.clone());
configs.insert(removed.id.clone(), removed.clone());
}
let stale = state.mq_registry.get_or_build(&removed).await.unwrap();
let stale = state.mq_registry.get_or_build(&removed).await.unwrap().adapter;
save_connection_configs(&state, std::slice::from_ref(&kept)).await.unwrap();
@@ -562,7 +562,7 @@ mod tests {
assert!(!configs.contains_key("removed-mq"));
drop(configs);
let rebuilt = state.mq_registry.get_or_build(&removed).await.unwrap();
let rebuilt = state.mq_registry.get_or_build(&removed).await.unwrap().adapter;
assert!(!std::sync::Arc::ptr_eq(&stale, &rebuilt));
let _ = std::fs::remove_dir_all(dir);
@@ -1085,19 +1085,12 @@ async fn test_connection_with_info_inner(
}
#[cfg(feature = "mq-admin")]
DatabaseType::MessageQueue => {
// Probe with a transient adapter so Test Connection never retains/replaces
// a live cached MQ agent for this connection id (same pattern as Nacos).
let mqc = state.mq_admin_config_for_connection(connection_id, &config).await?;
let agent_launch = dbx_core::mq::service::resolve_mq_agent_launch_spec(&mqc, state);
let adapter = match state.mq_registry.get_or_build_config(connection_id, mqc, agent_launch).await {
Ok(adapter) => adapter,
Err(err) => {
state.mq_registry.drop_connection(connection_id).await;
return Err(err);
}
};
if let Err(err) = adapter.test_connection().await {
state.mq_registry.drop_connection(connection_id).await;
return Err(err);
}
let adapter = state.mq_registry.build_transient_config(mqc, agent_launch).await?;
adapter.test_connection().await?;
Ok("Connection successful".to_string())
}
#[cfg(not(feature = "mq-admin"))]
@@ -1420,8 +1413,8 @@ pub async fn connect_db(
DatabaseType::MessageQueue => {
let mqc = state.mq_admin_config_for_connection(&id, &config).await?;
let agent_launch = dbx_core::mq::service::resolve_mq_agent_launch_spec(&mqc, &state);
let adapter = match state.mq_registry.get_or_build_config(&id, mqc, agent_launch).await {
Ok(adapter) => adapter,
let build = match state.mq_registry.get_or_build_config(&id, mqc, agent_launch).await {
Ok(build) => build,
Err(err) => {
state.mq_registry.drop_connection(&id).await;
return Err(err);
@@ -1431,7 +1424,7 @@ pub async fn connect_db(
state.mq_registry.drop_connection(&id).await;
return Err(err);
}
if let Err(err) = adapter.test_connection().await {
if let Err(err) = dbx_core::mq::validate_mq_adapter_after_build(&build).await {
state.mq_registry.drop_connection(&id).await;
return Err(err);
}