Use `MetadataReport` to get metadata. (#1154)

diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
index 6be548a..6a178d6 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
@@ -24,15 +24,17 @@
 import org.apache.dubbo.admin.registry.mapping.ServiceMapping;
 import org.apache.dubbo.admin.registry.mapping.impl.NoOpServiceMapping;
 import org.apache.dubbo.admin.registry.metadata.MetaDataCollector;
-import org.apache.dubbo.admin.registry.metadata.impl.NoOpMetadataCollector;
 import org.apache.dubbo.admin.service.impl.InstanceRegistryCache;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.beans.factory.ScopeBeanFactory;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.metadata.MappingListener;
+import org.apache.dubbo.metadata.report.MetadataReport;
+import org.apache.dubbo.metadata.report.MetadataReportInstance;
 import org.apache.dubbo.registry.Registry;
 import org.apache.dubbo.registry.RegistryFactory;
 import org.apache.dubbo.registry.RegistryService;
@@ -45,8 +47,8 @@
 import org.springframework.context.annotation.DependsOn;
 
 import java.util.Arrays;
+import java.util.Optional;
 
-import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY;
 import static org.apache.dubbo.common.constants.RegistryConstants.ENABLE_EMPTY_PROTECTION_KEY;
 import static org.apache.dubbo.registry.client.ServiceDiscoveryFactory.getExtension;
 
@@ -166,22 +168,19 @@
     @Bean("metaDataCollector")
     @DependsOn("governanceConfiguration")
     MetaDataCollector getMetadataCollector() {
-        MetaDataCollector metaDataCollector = new NoOpMetadataCollector();
-        if (metadataUrl == null) {
-            if (StringUtils.isNotEmpty(metadataAddress)) {
-                metadataUrl = formUrl(metadataAddress, metadataGroup, metadataGroupNameSpace, username, password);
-                metadataUrl = metadataUrl.addParameter(CLUSTER_KEY, cluster);
-            }
-            logger.info("Admin using metadata address: " + metadataUrl);
-        }
-        if (metadataUrl != null) {
-            metaDataCollector = ApplicationModel.defaultModel().getExtensionLoader(MetaDataCollector.class).getExtension(metadataUrl.getProtocol());
-            metaDataCollector.setUrl(metadataUrl);
-            metaDataCollector.init();
+        ApplicationModel applicationModel = ApplicationModel.defaultModel();
+        ScopeBeanFactory beanFactory = applicationModel.getBeanFactory();
+        MetadataReportInstance metadataReportInstance = beanFactory.registerBean(MetadataReportInstance.class);
+
+        Optional<MetadataReport> metadataReport = metadataReportInstance.getMetadataReports(true)
+                .values().stream().findAny();
+
+        if (metadataReport.isPresent()) {
+            return metadataReport.get()::getServiceDefinition;
         } else {
-            logger.warn("you are using dubbo.registry.address, which is not recommend, please refer to: https://github.com/apache/dubbo-admin/wiki/Dubbo-Admin-configuration");
+            //NoOpMetadataCollector
+            return key -> null;
         }
-        return metaDataCollector;
     }
 
 
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/MetaDataCollector.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/MetaDataCollector.java
index 3901789..3d398be 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/MetaDataCollector.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/MetaDataCollector.java
@@ -17,20 +17,9 @@
 
 package org.apache.dubbo.admin.registry.metadata;
 
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.extension.SPI;
 import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;
 
-@SPI("zookeeper")
 public interface MetaDataCollector {
-
-    void setUrl(URL url);
-
-    URL getUrl();
-
-    void init();
-
-    String getProviderMetaData(MetadataIdentifier key);
-
-    String getConsumerMetaData(MetadataIdentifier key);
+    
+    String getMetaData(MetadataIdentifier key);
 }
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/ConsulMetaDataCollector.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/ConsulMetaDataCollector.java
deleted file mode 100644
index 7a1cbd9..0000000
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/ConsulMetaDataCollector.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo.admin.registry.metadata.impl;
-
-
-import org.apache.dubbo.admin.registry.metadata.MetaDataCollector;
-
-import com.ecwid.consul.v1.ConsulClient;
-import com.ecwid.consul.v1.Response;
-import com.ecwid.consul.v1.kv.model.GetValue;
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.logger.Logger;
-import org.apache.dubbo.common.logger.LoggerFactory;
-import org.apache.dubbo.metadata.report.identifier.KeyTypeEnum;
-import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;
-
-import java.util.Objects;
-
-
-public class ConsulMetaDataCollector implements MetaDataCollector {
-    private static final Logger LOG = LoggerFactory.getLogger(ConsulMetaDataCollector.class);
-    private static final int DEFAULT_PORT = 8500;
-    private URL url;
-    private ConsulClient client;
-
-    @Override
-    public URL getUrl() {
-        return this.url;
-    }
-
-    @Override
-    public void setUrl(URL url) {
-        this.url = url;
-    }
-
-    @Override
-    public void init() {
-        Objects.requireNonNull(this.url, "metadataUrl require not null");
-        String host = this.url.getHost();
-        int port = this.url.getPort() != 0 ? url.getPort() : DEFAULT_PORT;
-        this.client = new ConsulClient(host, port);
-    }
-
-    @Override
-    public String getProviderMetaData(MetadataIdentifier key) {
-        return doGetMetaData(key);
-    }
-
-    @Override
-    public String getConsumerMetaData(MetadataIdentifier key) {
-        return doGetMetaData(key);
-    }
-
-    private String doGetMetaData(MetadataIdentifier key) {
-        try {
-            Response<GetValue> response = this.client.getKVValue(key.getUniqueKey(KeyTypeEnum.UNIQUE_KEY));
-            return response.getValue().getDecodedValue();
-        } catch (Exception e) {
-            LOG.error(String.format("Failed to fetch metadata for %s from consul, cause: %s",
-                    key.getUniqueKey(KeyTypeEnum.UNIQUE_KEY), e.getMessage()), e);
-        }
-        return null;
-    }
-
-    //just for test
-    ConsulClient getClient() {
-        return this.client;
-    }
-}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/NacosMetaDataCollector.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/NacosMetaDataCollector.java
deleted file mode 100644
index f03ca39..0000000
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/NacosMetaDataCollector.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo.admin.registry.metadata.impl;
-
-import com.alibaba.nacos.api.PropertyKeyConst;
-import java.util.Map;
-import org.apache.dubbo.admin.common.util.Constants;
-import org.apache.dubbo.admin.registry.metadata.MetaDataCollector;
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.logger.Logger;
-import org.apache.dubbo.common.logger.LoggerFactory;
-import org.apache.dubbo.common.utils.StringConstantFieldValuePredicate;
-import org.apache.dubbo.metadata.report.identifier.KeyTypeEnum;
-import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;
-
-import com.alibaba.nacos.api.NacosFactory;
-import com.alibaba.nacos.api.config.ConfigService;
-import com.alibaba.nacos.api.exception.NacosException;
-import org.apache.commons.lang3.StringUtils;
-
-import java.util.Properties;
-
-import static com.alibaba.nacos.api.PropertyKeyConst.SERVER_ADDR;
-import static com.alibaba.nacos.api.PropertyKeyConst.NAMESPACE;
-
-public class NacosMetaDataCollector implements MetaDataCollector {
-    private static final Logger logger = LoggerFactory.getLogger(NacosMetaDataCollector.class);
-    private ConfigService configService;
-    private String group;
-    private URL url;
-    @Override
-    public void setUrl(URL url) {
-        this.url = url;
-    }
-
-    @Override
-    public URL getUrl() {
-        return url;
-    }
-
-    @Override
-    public void init() {
-        group = url.getParameter(Constants.GROUP_KEY, "DEFAULT_GROUP");
-        configService = buildConfigService(url);
-    }
-
-    private ConfigService buildConfigService(URL url) {
-        Properties nacosProperties = buildNacosProperties(url);
-        try {
-            configService = NacosFactory.createConfigService(nacosProperties);
-        } catch (NacosException e) {
-            if (logger.isErrorEnabled()) {
-                logger.error(e.getErrMsg(), e);
-            }
-            throw new IllegalStateException(e);
-        }
-        return configService;
-    }
-
-    private Properties buildNacosProperties(URL url) {
-        Properties properties = new Properties();
-        setServerAddr(url, properties);
-        setNamespace(url, properties);
-        Map<String, String> parameters = url.getParameters(
-                StringConstantFieldValuePredicate.of(PropertyKeyConst.class));
-        properties.putAll(parameters);
-        return properties;
-    }
-
-    private void setServerAddr(URL url, Properties properties) {
-
-        String serverAddr = url.getHost() + // Host
-                ":" +
-                url.getPort() // Port
-                ;
-        properties.put(SERVER_ADDR, serverAddr);
-    }
-
-    private void setNamespace(URL url, Properties properties) {
-        String namespace = url.getParameter(NAMESPACE);
-        if (StringUtils.isNotBlank(namespace)) {
-            properties.put(NAMESPACE, namespace);
-        }
-    }
-
-    @Override
-    public String getProviderMetaData(MetadataIdentifier key) {
-        return getMetaData(key);
-    }
-
-    @Override
-    public String getConsumerMetaData(MetadataIdentifier key) {
-        return getMetaData(key);
-    }
-
-    private String getMetaData(MetadataIdentifier identifier) {
-        try {
-            String fromDubboGroup = configService.getConfig(identifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY),
-                    "dubbo", 1000 * 10);
-            return org.apache.dubbo.common.utils.StringUtils.isNotEmpty(fromDubboGroup) ? fromDubboGroup :
-                    configService.getConfig(identifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY),
-                            group, 1000 * 10);
-        } catch (NacosException e) {
-            logger.warn("Failed to get " + identifier + " from nacos, cause: " + e.getMessage(), e);
-        }
-        return null;
-    }
-}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/NoOpMetadataCollector.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/NoOpMetadataCollector.java
deleted file mode 100644
index c6d6ad8..0000000
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/NoOpMetadataCollector.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo.admin.registry.metadata.impl;
-
-import org.apache.dubbo.admin.registry.metadata.MetaDataCollector;
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;
-
-public class NoOpMetadataCollector implements MetaDataCollector {
-
-    @Override
-    public void setUrl(URL url) {
-
-    }
-
-    @Override
-    public URL getUrl() {
-        return null;
-    }
-
-    @Override
-    public void init() {
-
-    }
-
-    @Override
-    public String getProviderMetaData(MetadataIdentifier key) {
-        return null;
-    }
-
-    @Override
-    public String getConsumerMetaData(MetadataIdentifier key) {
-        return null;
-    }
-}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/RedisMetaDataCollector.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/RedisMetaDataCollector.java
deleted file mode 100644
index eef3419..0000000
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/RedisMetaDataCollector.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo.admin.registry.metadata.impl;
-
-
-import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
-import org.apache.dubbo.admin.registry.metadata.MetaDataCollector;
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.metadata.report.identifier.KeyTypeEnum;
-import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;
-import org.apache.dubbo.rpc.RpcException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import redis.clients.jedis.HostAndPort;
-import redis.clients.jedis.Jedis;
-import redis.clients.jedis.JedisCluster;
-import redis.clients.jedis.JedisPool;
-import redis.clients.jedis.JedisPoolConfig;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN;
-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_TIMEOUT;
-import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY;
-import static org.apache.dubbo.metadata.MetadataConstants.META_DATA_STORE_TAG;
-
-public class RedisMetaDataCollector implements MetaDataCollector {
-
-    private final static Logger logger = LoggerFactory.getLogger(RedisMetaDataCollector.class);
-    private final static String REDIS_DATABASE_KEY = "database";
-    private URL url;
-    private JedisPool pool;
-    Set<HostAndPort> jedisClusterNodes;
-    private int timeout;
-    private String password;
-
-    @Override
-    public void setUrl(URL url) {
-        this.url = url;
-    }
-
-    @Override
-    public URL getUrl() {
-        return url;
-    }
-
-    @Override
-    public void init() {
-        timeout = url.getParameter(TIMEOUT_KEY, DEFAULT_TIMEOUT);
-        password = url.getPassword();
-        if (url.getParameter(CLUSTER_KEY, false)) {
-            jedisClusterNodes = new HashSet<>();
-            String[] addresses = COMMA_SPLIT_PATTERN.split(url.getAddress());
-            for (String address : addresses) {
-                URL tmpUrl = url.setAddress(address);
-                jedisClusterNodes.add(new HostAndPort(tmpUrl.getHost(), tmpUrl.getPort()));
-            }
-        } else {
-            int database = url.getParameter(REDIS_DATABASE_KEY, 0);
-            pool = new JedisPool(new JedisPoolConfig(), url.getHost(), url.getPort(), timeout, url.getPassword(), database);
-        }
-    }
-
-    @Override
-    public String getProviderMetaData(MetadataIdentifier key) {
-        return doGetMetaData(key);
-    }
-
-    @Override
-    public String getConsumerMetaData(MetadataIdentifier key) {
-        return doGetMetaData(key);
-    }
-
-    private String doGetMetaData(MetadataIdentifier identifier) {
-        String result = null;
-        if (url.getParameter(CLUSTER_KEY, false)) {
-            try (JedisCluster jedisCluster = new JedisCluster(jedisClusterNodes, timeout, timeout, 2, password, new GenericObjectPoolConfig())) {
-                result = jedisCluster.get(identifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY) + META_DATA_STORE_TAG);
-            } catch (Throwable e) {
-                logger.error("Failed to get " + identifier + " from redis cluster, cause: " + e.getMessage(), e);
-                throw new RpcException("Failed to get " + identifier + " from redis cluster, cause: " + e.getMessage(), e);
-            }
-        } else {
-            try (Jedis jedis = pool.getResource()) {
-                result = jedis.get(identifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY));
-            } catch (Throwable e) {
-                logger.error("Failed to get " + identifier + " from redis, cause: " + e.getMessage(), e);
-                throw new RpcException("Failed to get " + identifier + " from redis, cause: " + e.getMessage(), e);
-            }
-        }
-        return result;
-    }
-}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/ZookeeperMetaDataCollector.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/ZookeeperMetaDataCollector.java
deleted file mode 100644
index 9bba742..0000000
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/ZookeeperMetaDataCollector.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo.admin.registry.metadata.impl;
-
-import org.apache.curator.framework.CuratorFramework;
-import org.apache.curator.framework.CuratorFrameworkFactory;
-import org.apache.curator.retry.ExponentialBackoffRetry;
-import org.apache.dubbo.admin.common.util.Constants;
-import org.apache.dubbo.admin.registry.metadata.MetaDataCollector;
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.logger.Logger;
-import org.apache.dubbo.common.logger.LoggerFactory;
-import org.apache.dubbo.metadata.report.identifier.KeyTypeEnum;
-import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;
-
-public class ZookeeperMetaDataCollector implements MetaDataCollector {
-
-    private static final Logger logger = LoggerFactory.getLogger(ZookeeperMetaDataCollector.class);
-    private CuratorFramework client;
-    private URL url;
-    private String root;
-    private final static String DEFAULT_ROOT = "dubbo";
-
-    @Override
-    public void setUrl(URL url) {
-        this.url = url;
-    }
-
-    @Override
-    public URL getUrl() {
-        return url;
-    }
-
-    @Override
-    public void init() {
-        String group = url.getParameter(Constants.GROUP_KEY, DEFAULT_ROOT);
-        if (!group.startsWith(Constants.PATH_SEPARATOR)) {
-            group = Constants.PATH_SEPARATOR + group;
-        }
-        root = group;
-        CuratorFrameworkFactory.Builder builder = CuratorFrameworkFactory.
-                builder()
-                .connectString(url.getAddress())
-                .retryPolicy(new ExponentialBackoffRetry(1000, 3));
-        String userInformation = url.getUserInformation();
-        if (userInformation != null && userInformation.length() > 0) {
-            builder = builder.authorization("digest", userInformation.getBytes());
-        }
-        client = builder.build();
-        client.start();
-    }
-
-
-    @Override
-    public String getProviderMetaData(MetadataIdentifier key) {
-        return doGetMetadata(key);
-    }
-
-    @Override
-    public String getConsumerMetaData(MetadataIdentifier key) {
-        return doGetMetadata(key);
-    }
-
-    private String getNodePath(MetadataIdentifier metadataIdentifier) {
-        return toRootDir() + metadataIdentifier.getUniqueKey(KeyTypeEnum.PATH);
-    }
-
-    private String toRootDir() {
-        if (root.equals(Constants.PATH_SEPARATOR)) {
-            return root;
-        }
-        return root + Constants.PATH_SEPARATOR;
-    }
-
-    private String doGetMetadata(MetadataIdentifier identifier) {
-        //TODO error handing
-        try {
-            String path = getNodePath(identifier);
-            if (client.checkExists().forPath(path) == null) {
-                return null;
-            }
-            return new String(client.getData().forPath(path));
-        } catch (Exception e) {
-            logger.error(e.getMessage(), e);
-        }
-        return null;
-    }
-}
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/ConsumerServiceImpl.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/ConsumerServiceImpl.java
index 8395026..829330d 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/ConsumerServiceImpl.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/ConsumerServiceImpl.java
@@ -55,7 +55,7 @@
 
     @Override
     public String getConsumerMetadata(MetadataIdentifier consumerIdentifier) {
-        return metaDataCollector.getConsumerMetaData(consumerIdentifier);
+        return metaDataCollector.getMetaData(consumerIdentifier);
     }
 
     private Map<String, URL> findAllConsumerUrl() {
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/ProviderServiceImpl.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/ProviderServiceImpl.java
index 5e09ed7..81d9970 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/ProviderServiceImpl.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/ProviderServiceImpl.java
@@ -59,7 +59,7 @@
 
     @Override
     public String getProviderMetaData(MetadataIdentifier providerIdentifier) {
-        return metaDataCollector.getProviderMetaData(providerIdentifier);
+        return metaDataCollector.getMetaData(providerIdentifier);
     }
 
     @Override
diff --git a/dubbo-admin-server/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.admin.registry.metadata.MetaDataCollector b/dubbo-admin-server/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.admin.registry.metadata.MetaDataCollector
deleted file mode 100644
index fc4c855..0000000
--- a/dubbo-admin-server/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.admin.registry.metadata.MetaDataCollector
+++ /dev/null
@@ -1,4 +0,0 @@
-zookeeper=org.apache.dubbo.admin.registry.metadata.impl.ZookeeperMetaDataCollector
-redis=org.apache.dubbo.admin.registry.metadata.impl.RedisMetaDataCollector
-consul=org.apache.dubbo.admin.registry.metadata.impl.ConsulMetaDataCollector
-nacos=org.apache.dubbo.admin.registry.metadata.impl.NacosMetaDataCollector
\ No newline at end of file
diff --git a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/config/ConfigCenterTest.java b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/config/ConfigCenterTest.java
index 87271c1..53ec12a 100644
--- a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/config/ConfigCenterTest.java
+++ b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/config/ConfigCenterTest.java
@@ -148,10 +148,5 @@
         ReflectionTestUtils.setField(configCenter, "metadataAddress", zkAddress + "?group=" + "dubbo");
         ReflectionTestUtils.setField(configCenter, "username", "username");
         ReflectionTestUtils.setField(configCenter, "password", "password");
-
-        configCenter.getMetadataCollector();
-        Object metadataUrl = ReflectionTestUtils.getField(configCenter, "metadataUrl");
-        assertNotNull(metadataUrl);
-        assertEquals("127.0.0.1", ((URL) metadataUrl).getHost());
     }
 }
diff --git a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/registry/metadata/impl/ConsulMetaDataCollectorTest.java b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/registry/metadata/impl/ConsulMetaDataCollectorTest.java
deleted file mode 100644
index 149539c..0000000
--- a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/registry/metadata/impl/ConsulMetaDataCollectorTest.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dubbo.admin.registry.metadata.impl;
-
-
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
-import com.pszymczyk.consul.ConsulProcess;
-import com.pszymczyk.consul.ConsulStarterBuilder;
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.metadata.definition.ServiceDefinitionBuilder;
-import org.apache.dubbo.metadata.definition.model.FullServiceDefinition;
-import org.apache.dubbo.metadata.definition.model.MethodDefinition;
-import org.apache.dubbo.metadata.definition.util.ClassUtils;
-import org.apache.dubbo.metadata.report.identifier.KeyTypeEnum;
-import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;
-import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE;
-
-public class ConsulMetaDataCollectorTest {
-
-    private final Gson gson = new Gson();
-    private ConsulProcess consul;
-    private ConsulMetaDataCollector consulMetaDataCollector;
-
-    @Before
-    public void setUp() {
-        consul = ConsulStarterBuilder.consulStarter().build().start();
-        consulMetaDataCollector = new ConsulMetaDataCollector();
-        consulMetaDataCollector.setUrl(URL.valueOf("consul://127.0.0.1:" + consul.getHttpPort()));
-        consulMetaDataCollector.init();
-    }
-
-    @After
-    public void tearDown() {
-        consul.close();
-        consulMetaDataCollector = null;
-    }
-
-    @Test
-    public void testGetProviderMetaData() {
-        MetadataIdentifier identifier = buildIdentifier(true);
-
-        Map<String, String> params = new HashMap<>();
-        params.put("key1", "value1");
-        params.put("key2", "true");
-
-        FullServiceDefinition definition = ServiceDefinitionBuilder.buildFullDefinition(ServiceA.class, params);
-
-        String metadata = gson.toJson(definition);
-        consulMetaDataCollector.getClient().setKVValue(identifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY), metadata);
-
-        String providerMetaData = consulMetaDataCollector.getProviderMetaData(identifier);
-        Assert.assertEquals(metadata, providerMetaData);
-
-        FullServiceDefinition retDef = gson.fromJson(providerMetaData, FullServiceDefinition.class);
-        Assert.assertEquals(ServiceA.class.getCanonicalName(), retDef.getCanonicalName());
-        Assert.assertEquals(ClassUtils.getCodeSource(ServiceA.class), retDef.getCodeSource());
-        Assert.assertEquals(params, retDef.getParameters());
-
-        //method def assertions
-        Assert.assertNotNull(retDef.getMethods());
-        Assert.assertEquals(3, retDef.getMethods().size());
-        List<String> methodNames = retDef.getMethods().stream().map(MethodDefinition::getName).sorted().collect(Collectors.toList());
-        Assert.assertEquals("method1", methodNames.get(0));
-        Assert.assertEquals("method2", methodNames.get(1));
-        Assert.assertEquals("method3", methodNames.get(2));
-    }
-
-
-    @Test
-    public void testGetConsumerMetaData() {
-        MetadataIdentifier identifier = buildIdentifier(false);
-
-        Map<String, String> consumerParams = new HashMap<>();
-        consumerParams.put("k1", "v1");
-        consumerParams.put("k2", "1");
-        consumerParams.put("k3", "true");
-        String metadata = gson.toJson(consumerParams);
-        consulMetaDataCollector.getClient().setKVValue(identifier.getUniqueKey(KeyTypeEnum.UNIQUE_KEY), metadata);
-
-        String consumerMetaData = consulMetaDataCollector.getConsumerMetaData(identifier);
-        Map<String, String> retParams = gson.fromJson(consumerMetaData, new TypeToken<Map<String, String>>() {
-        }.getType());
-        Assert.assertEquals(consumerParams, retParams);
-    }
-
-
-    private MetadataIdentifier buildIdentifier(boolean isProducer) {
-        MetadataIdentifier identifier = new MetadataIdentifier();
-        identifier.setApplication(String.format("metadata-%s-test", isProducer ? "provider" : "consumer"));
-        identifier.setGroup("group");
-        identifier.setServiceInterface(ServiceA.class.getName());
-        identifier.setSide(isProducer ? PROVIDER_SIDE : CONSUMER_SIDE);
-        identifier.setVersion("1.0.0");
-        return identifier;
-    }
-
-
-    interface ServiceA {
-        void method1();
-
-        void method2() throws IOException;
-
-        String method3();
-    }
-
-}