in registry/nacos/src/lib.rs [204:249]
fn subscribe(&self, url: Url, listener: RegistryNotifyListener) -> Result<(), dubbo::StdError> {
let service_name = NacosServiceName::new(&url);
let url_str = url.to_url();
info!("subscribe: {}", &url_str);
let nacos_listener: Arc<NotifyListenerWrapper> = {
let listeners = self.listeners.lock();
if let Err(e) = listeners {
error!("subscribe service failed: {:?}", e);
return Err(anyhow!("subscribe service failed: {:?}", e).into());
}
let mut listeners = listeners.unwrap();
let listener_set = listeners.get_mut(url_str.as_str());
let wrapper = Arc::new(NotifyListenerWrapper(listener));
if let Some(listener_set) = listener_set {
listener_set.insert(wrapper.clone());
} else {
let mut hash_set = HashSet::new();
hash_set.insert(wrapper.clone());
listeners.insert(url_str, hash_set);
}
wrapper
};
let ret = self.nacos_naming_service.subscribe(
service_name.to_subscriber_str(),
Some(
service_name
.get_group_with_default(DEFAULT_GROUP)
.to_string(),
),
Vec::new(),
nacos_listener,
);
if let Err(e) = ret {
error!("subscribe service failed: {:?}", e);
return Err(anyhow!("subscribe service failed: {:?}", e).into());
}
Ok(())
}