fn subscribe()

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(())
    }