This is an automated email from the ASF dual-hosted git repository.
yangyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/dubbo-rust.git
The following commit(s) were added to refs/heads/main by this push:
new 4aabde8 Imp: remove GAT in the Registry trait‘s definition (#117)
4aabde8 is described below
commit 4aabde88e718c04bd0e6cf87455f3b010655d423
Author: 毛文超 <[email protected]>
AuthorDate: Thu Feb 23 23:42:56 2023 +0800
Imp: remove GAT in the Registry trait‘s definition (#117)
Close #115
---
dubbo/src/cluster/directory.rs | 4 ++--
dubbo/src/registry/memory_registry.rs | 8 +++-----
dubbo/src/registry/mod.rs | 22 +++++++++++++--------
dubbo/src/registry/types.rs | 10 +++++-----
registry-nacos/src/nacos_registry.rs | 12 +++++++-----
registry-zookeeper/src/zookeeper_registry.rs | 29 +++++++++++-----------------
6 files changed, 42 insertions(+), 43 deletions(-)
diff --git a/dubbo/src/cluster/directory.rs b/dubbo/src/cluster/directory.rs
index 02946a9..2879de4 100644
--- a/dubbo/src/cluster/directory.rs
+++ b/dubbo/src/cluster/directory.rs
@@ -136,9 +136,9 @@ impl Directory for RegistryDirectory {
.expect("msg")
.subscribe(
url,
- MemoryNotifyListener {
+ Arc::new(MemoryNotifyListener {
service_instances: Arc::clone(&self.service_instances),
- },
+ }),
)
.expect("subscribe");
diff --git a/dubbo/src/registry/memory_registry.rs
b/dubbo/src/registry/memory_registry.rs
index 61d3e41..b41a0e0 100644
--- a/dubbo/src/registry/memory_registry.rs
+++ b/dubbo/src/registry/memory_registry.rs
@@ -25,7 +25,7 @@ use tracing::debug;
use crate::common::url::Url;
-use super::{NotifyListener, Registry};
+use super::{NotifyListener, Registry, RegistryNotifyListener};
// 从url中获取服务注册的元数据
/// rawURL = fmt.Sprintf("%s://%s%s?%s", c.Protocol, host, c.Path, s)
@@ -47,8 +47,6 @@ impl MemoryRegistry {
}
impl Registry for MemoryRegistry {
- type NotifyListener = MemoryNotifyListener;
-
fn register(&mut self, mut url: Url) -> Result<(), crate::StdError> {
// define provider label: ${registry.group}/${service_name}/provider
let registry_group = match url.get_param(REGISTRY_GROUP_KEY) {
@@ -91,7 +89,7 @@ impl Registry for MemoryRegistry {
fn subscribe(
&self,
url: crate::common::url::Url,
- listener: Self::NotifyListener,
+ listener: RegistryNotifyListener,
) -> Result<(), crate::StdError> {
todo!()
}
@@ -99,7 +97,7 @@ impl Registry for MemoryRegistry {
fn unsubscribe(
&self,
url: crate::common::url::Url,
- listener: Self::NotifyListener,
+ listener: RegistryNotifyListener,
) -> Result<(), crate::StdError> {
todo!()
}
diff --git a/dubbo/src/registry/mod.rs b/dubbo/src/registry/mod.rs
index 6352cf1..4483588 100644
--- a/dubbo/src/registry/mod.rs
+++ b/dubbo/src/registry/mod.rs
@@ -21,18 +21,24 @@ pub mod memory_registry;
pub mod protocol;
pub mod types;
-use std::fmt::{Debug, Formatter};
+use std::{
+ fmt::{Debug, Formatter},
+ sync::Arc,
+};
-use crate::{common::url::Url, registry::memory_registry::MemoryNotifyListener};
+use crate::common::url::Url;
+pub type RegistryNotifyListener = Arc<dyn NotifyListener + Send + Sync +
'static>;
pub trait Registry {
- type NotifyListener;
-
fn register(&mut self, url: Url) -> Result<(), crate::StdError>;
fn unregister(&mut self, url: Url) -> Result<(), crate::StdError>;
- fn subscribe(&self, url: Url, listener: Self::NotifyListener) ->
Result<(), crate::StdError>;
- fn unsubscribe(&self, url: Url, listener: Self::NotifyListener) ->
Result<(), crate::StdError>;
+ fn subscribe(&self, url: Url, listener: RegistryNotifyListener) ->
Result<(), crate::StdError>;
+ fn unsubscribe(
+ &self,
+ url: Url,
+ listener: RegistryNotifyListener,
+ ) -> Result<(), crate::StdError>;
}
pub trait NotifyListener {
@@ -47,7 +53,7 @@ pub struct ServiceEvent {
pub service: Vec<Url>,
}
-pub type BoxRegistry = Box<dyn Registry<NotifyListener = MemoryNotifyListener>
+ Send + Sync>;
+pub type BoxRegistry = Box<dyn Registry + Send + Sync>;
impl Debug for BoxRegistry {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
@@ -57,7 +63,7 @@ impl Debug for BoxRegistry {
#[derive(Default)]
pub struct RegistryWrapper {
- pub registry: Option<Box<dyn Registry<NotifyListener =
MemoryNotifyListener>>>,
+ pub registry: Option<Box<dyn Registry>>,
}
impl Clone for RegistryWrapper {
diff --git a/dubbo/src/registry/types.rs b/dubbo/src/registry/types.rs
index 77d253a..8b97864 100644
--- a/dubbo/src/registry/types.rs
+++ b/dubbo/src/registry/types.rs
@@ -25,10 +25,12 @@ use tracing::info;
use crate::{
common::url::Url,
- registry::{memory_registry::MemoryNotifyListener, BoxRegistry, Registry},
+ registry::{BoxRegistry, Registry},
StdError,
};
+use super::RegistryNotifyListener;
+
pub type SafeRegistry = Arc<Mutex<BoxRegistry>>;
pub type Registries = Arc<Mutex<HashMap<String, SafeRegistry>>>;
@@ -66,8 +68,6 @@ impl RegistriesOperation for Registries {
}
impl Registry for SafeRegistry {
- type NotifyListener = MemoryNotifyListener;
-
fn register(&mut self, url: Url) -> Result<(), StdError> {
info!("register {}.", url);
self.lock().unwrap().register(url).expect("registry err.");
@@ -79,12 +79,12 @@ impl Registry for SafeRegistry {
Ok(())
}
- fn subscribe(&self, url: Url, listener: Self::NotifyListener) ->
Result<(), StdError> {
+ fn subscribe(&self, url: Url, listener: RegistryNotifyListener) ->
Result<(), StdError> {
self.lock().unwrap().register(url).expect("registry err.");
Ok(())
}
- fn unsubscribe(&self, url: Url, listener: Self::NotifyListener) ->
Result<(), StdError> {
+ fn unsubscribe(&self, url: Url, listener: RegistryNotifyListener) ->
Result<(), StdError> {
self.lock().unwrap().register(url).expect("registry err.");
Ok(())
}
diff --git a/registry-nacos/src/nacos_registry.rs
b/registry-nacos/src/nacos_registry.rs
index 042d6f2..888382f 100644
--- a/registry-nacos/src/nacos_registry.rs
+++ b/registry-nacos/src/nacos_registry.rs
@@ -23,7 +23,7 @@ use std::{
use anyhow::anyhow;
use dubbo::{
common::url::Url,
- registry::{NotifyListener, Registry, ServiceEvent},
+ registry::{NotifyListener, Registry, RegistryNotifyListener, ServiceEvent},
};
use nacos_sdk::api::naming::{NamingService, NamingServiceBuilder,
ServiceInstance};
use tracing::{error, info, warn};
@@ -139,8 +139,6 @@ impl NacosRegistry {
}
impl Registry for NacosRegistry {
- type NotifyListener = Arc<dyn NotifyListener + Sync + Send + 'static>;
-
fn register(&mut self, url: Url) -> Result<(), dubbo::StdError> {
let side = url.get_param(SIDE_KEY).unwrap_or_default();
let register_consumer = url
@@ -205,7 +203,7 @@ impl Registry for NacosRegistry {
Ok(())
}
- fn subscribe(&self, url: Url, listener: Self::NotifyListener) ->
Result<(), dubbo::StdError> {
+ fn subscribe(&self, url: Url, listener: RegistryNotifyListener) ->
Result<(), dubbo::StdError> {
let service_name = NacosServiceName::new(&url);
let url_str = url.to_url();
@@ -252,7 +250,11 @@ impl Registry for NacosRegistry {
Ok(())
}
- fn unsubscribe(&self, url: Url, listener: Self::NotifyListener) ->
Result<(), dubbo::StdError> {
+ fn unsubscribe(
+ &self,
+ url: Url,
+ listener: RegistryNotifyListener,
+ ) -> Result<(), dubbo::StdError> {
let service_name = NacosServiceName::new(&url);
let url_str = url.to_url();
info!("unsubscribe: {}", &url_str);
diff --git a/registry-zookeeper/src/zookeeper_registry.rs
b/registry-zookeeper/src/zookeeper_registry.rs
index a9fc9ec..b31d25c 100644
--- a/registry-zookeeper/src/zookeeper_registry.rs
+++ b/registry-zookeeper/src/zookeeper_registry.rs
@@ -37,9 +37,8 @@ use dubbo::{
url::Url,
},
registry::{
- integration::ClusterRegistryIntegration,
- memory_registry::{MemoryNotifyListener, MemoryRegistry},
- NotifyListener, Registry, ServiceEvent,
+ integration::ClusterRegistryIntegration,
memory_registry::MemoryRegistry, NotifyListener,
+ Registry, RegistryNotifyListener, ServiceEvent,
},
StdError,
};
@@ -61,7 +60,7 @@ impl Watcher for LoggingWatcher {
pub struct ZookeeperRegistry {
root_path: String,
zk_client: Arc<ZooKeeper>,
- listeners: RwLock<HashMap<String, Arc<<ZookeeperRegistry as
Registry>::NotifyListener>>>,
+ listeners: RwLock<HashMap<String, RegistryNotifyListener>>,
memory_registry: Arc<Mutex<MemoryRegistry>>,
}
@@ -103,7 +102,7 @@ impl ZookeeperRegistry {
&self,
path: String,
service_name: String,
- listener: Arc<<ZookeeperRegistry as Registry>::NotifyListener>,
+ listener: RegistryNotifyListener,
) -> ServiceInstancesChangedListener {
let mut service_names = HashSet::new();
service_names.insert(service_name.clone());
@@ -240,8 +239,6 @@ impl Default for ZookeeperRegistry {
}
impl Registry for ZookeeperRegistry {
- type NotifyListener = MemoryNotifyListener;
-
fn register(&mut self, url: Url) -> Result<(), StdError> {
println!("register url: {}", url);
let zk_path = format!(
@@ -268,7 +265,7 @@ impl Registry for ZookeeperRegistry {
}
// for consumer to find the changes of providers
- fn subscribe(&self, url: Url, listener: Self::NotifyListener) ->
Result<(), StdError> {
+ fn subscribe(&self, url: Url, listener: RegistryNotifyListener) ->
Result<(), StdError> {
let service_name = url.get_service_name();
let zk_path = format!("/{}/{}/{}", DUBBO_KEY, &service_name,
PROVIDERS_KEY);
if self
@@ -281,17 +278,13 @@ impl Registry for ZookeeperRegistry {
return Ok(());
}
- let arc_listener = Arc::new(listener);
self.listeners
.write()
.unwrap()
- .insert(service_name.to_string(), Arc::clone(&arc_listener));
+ .insert(service_name.to_string(), listener.clone());
- let zk_listener = self.create_listener(
- zk_path.clone(),
- service_name.to_string(),
- Arc::clone(&arc_listener),
- );
+ let zk_listener =
+ self.create_listener(zk_path.clone(), service_name.to_string(),
listener.clone());
let zk_changed_paths = self.zk_client.get_children_w(&zk_path,
zk_listener);
let result = match zk_changed_paths {
@@ -312,7 +305,7 @@ impl Registry for ZookeeperRegistry {
.collect(),
};
info!("notifying {}->{:?}", service_name, result);
- arc_listener.notify(ServiceEvent {
+ listener.notify(ServiceEvent {
key: service_name,
action: String::from("ADD"),
service: result,
@@ -320,7 +313,7 @@ impl Registry for ZookeeperRegistry {
Ok(())
}
- fn unsubscribe(&self, url: Url, listener: Self::NotifyListener) ->
Result<(), StdError> {
+ fn unsubscribe(&self, url: Url, listener: RegistryNotifyListener) ->
Result<(), StdError> {
todo!()
}
}
@@ -329,7 +322,7 @@ pub struct ServiceInstancesChangedListener {
zk_client: Arc<ZooKeeper>,
path: String,
service_name: String,
- listener: Arc<MemoryNotifyListener>,
+ listener: RegistryNotifyListener,
}
impl Watcher for ServiceInstancesChangedListener {