You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2020/07/23 02:46:47 UTC

[dubbo] branch 3.0 updated: fix metadata conflicts after master merged

This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new a587759  fix metadata conflicts after master merged
a587759 is described below

commit a5877596454b4e0e1d9aa527c8a051bf8b071343
Author: ken.lj <ke...@gmail.com>
AuthorDate: Thu Jul 23 10:46:22 2020 +0800

    fix metadata conflicts after master merged
---
 .../dubbo/config/bootstrap/DubboBootstrap.java     |   5 +-
 .../metadata/AbstractMetadataServiceExporter.java  | 150 ------------
 .../ConfigurableMetadataServiceExporter.java       |  69 +++---
 .../metadata/RemoteMetadataServiceExporter.java    |  79 ------
 .../PublishingServiceDefinitionListenerTest.java   |   2 +-
 .../RemoteMetadataServiceExporterTest.java         | 106 --------
 dubbo-dependencies-bom/pom.xml                     |   8 +-
 .../metadata/CompositeServiceNameMapping.java      |  96 --------
 .../org/apache/dubbo/metadata/MetadataInfo.java    |   4 +-
 .../metadata/ParameterizedServiceNameMapping.java  |  47 ----
 .../metadata/PropertiesFileServiceNameMapping.java | 148 -----------
 .../dubbo/metadata/ReadOnlyServiceNameMapping.java |  45 ----
 .../report/support/AbstractMetadataReport.java     | 133 +++-------
 .../support/ConfigCenterBasedMetadataReport.java   | 162 -------------
 .../ConfigCenterBasedMetadataReportFactory.java    |  90 -------
 .../file/FileSystemMetadataReportFactory.java      |  33 ---
 .../org.apache.dubbo.metadata.MetadataParamsFilter |   1 +
 .../metadata/CompositeServiceNameMappingTest.java  | 107 --------
 .../dubbo/metadata/MetadataConstantsTest.java      |  35 ---
 .../ParameterizedServiceNameMappingTest.java       |  67 -----
 .../PropertiesFileServiceNameMappingTest.java      |  60 -----
 .../dubbo/metadata/ServiceNameMappingTest.java     |   8 +-
 .../support/AbstractMetadataReportFactoryTest.java | 270 ++++++++++-----------
 .../report/support/AbstractMetadataReportTest.java |  58 +++--
 .../ConfigCenterBasedMetadataReportTest.java       | 155 ------------
 .../store/zookeeper/ZookeeperMetadataReport.java   |  29 ---
 .../zookeeper/ZookeeperMetadataReportFactory.java  |  22 +-
 dubbo-metadata/pom.xml                             |  12 +-
 .../registry/client/ServiceDiscoveryRegistry.java  |   4 +-
 .../CompositeMetadataServiceProxyFactory.java      | 133 ----------
 .../proxy/BaseMetadataServiceProxyFactoryTest.java |  78 ------
 .../CompositeMetadataServiceProxyFactoryTest.java  |  96 --------
 .../proxy/MetadataServiceProxyFactoryTest.java     |  49 ----
 .../proxy/MyMetadataServiceProxyFactory.java       |  29 ---
 34 files changed, 289 insertions(+), 2101 deletions(-)

diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java
index 3806b73..34977b3 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java
@@ -55,6 +55,7 @@ import org.apache.dubbo.config.bootstrap.builders.ReferenceBuilder;
 import org.apache.dubbo.config.bootstrap.builders.RegistryBuilder;
 import org.apache.dubbo.config.bootstrap.builders.ServiceBuilder;
 import org.apache.dubbo.config.context.ConfigManager;
+import org.apache.dubbo.config.metadata.ConfigurableMetadataServiceExporter;
 import org.apache.dubbo.config.utils.ConfigValidationUtils;
 import org.apache.dubbo.config.utils.ReferenceConfigCache;
 import org.apache.dubbo.event.EventDispatcher;
@@ -80,7 +81,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
-import java.util.Optional;
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.concurrent.CompletableFuture;
@@ -93,7 +93,6 @@ import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
-import java.util.stream.Collectors;
 
 import static java.lang.String.format;
 import static java.util.Arrays.asList;
@@ -868,7 +867,7 @@ public class DubboBootstrap extends GenericEventListener {
      * Initialize {@link MetadataService} from {@link WritableMetadataService}'s extension
      */
     private void initMetadataService() {
-        startMetadataReport();
+        startMetadataCenter();
         this.metadataService = getDefaultExtension();
         this.metadataServiceExporter = new ConfigurableMetadataServiceExporter(metadataService);
     }
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/AbstractMetadataServiceExporter.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/AbstractMetadataServiceExporter.java
deleted file mode 100644
index ce2b389..0000000
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/AbstractMetadataServiceExporter.java
+++ /dev/null
@@ -1,150 +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.config.metadata;
-
-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.MetadataService;
-import org.apache.dubbo.metadata.MetadataServiceExporter;
-import org.apache.dubbo.metadata.MetadataServiceType;
-import org.apache.dubbo.metadata.WritableMetadataService;
-
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import static java.util.EnumSet.of;
-import static org.apache.dubbo.metadata.MetadataServiceType.getOrDefault;
-
-/**
- * The abstract implementation of {@link MetadataServiceExporter} to provider the commons features for sub-types
- *
- * @see MetadataServiceExporter
- * @see MetadataService
- * @since 2.7.8
- */
-public abstract class AbstractMetadataServiceExporter implements MetadataServiceExporter {
-
-    protected final Logger logger = LoggerFactory.getLogger(getClass());
-
-    protected final WritableMetadataService metadataService;
-
-    private final int priority;
-
-    private final Set<MetadataServiceType> supportedMetadataServiceTypes;
-
-    private volatile boolean exported = false;
-
-    public AbstractMetadataServiceExporter(String metadataType,
-                                           int priority,
-                                           MetadataServiceType supportMetadataServiceType,
-                                           MetadataServiceType... otherSupportMetadataServiceTypes) {
-        this(metadataType, priority, of(supportMetadataServiceType, otherSupportMetadataServiceTypes));
-    }
-
-    public AbstractMetadataServiceExporter(String metadataType,
-                                           int priority,
-                                           Set<MetadataServiceType> supportedMetadataServiceTypes) {
-        this.metadataService = WritableMetadataService.getExtension(metadataType);
-        this.priority = priority;
-        this.supportedMetadataServiceTypes = supportedMetadataServiceTypes;
-    }
-
-    @Override
-    public final MetadataServiceExporter export() {
-        if (!isExported()) {
-            try {
-                doExport();
-                exported = true;
-            } catch (Exception e) {
-                if (logger.isErrorEnabled()) {
-                    logger.error("Exporting the MetadataService fails", e);
-                }
-                exported = false;
-            }
-        } else {
-            if (logger.isWarnEnabled()) {
-                logger.warn("The MetadataService has been exported : " + getExportedURLs());
-            }
-        }
-        return this;
-    }
-
-    @Override
-    public final MetadataServiceExporter unexport() {
-        if (isExported()) {
-            try {
-                doUnexport();
-                exported = false;
-            } catch (Exception e) {
-                if (logger.isErrorEnabled()) {
-                    logger.error("UnExporting the MetadataService fails", e);
-                }
-            }
-        }
-        return this;
-    }
-
-    @Override
-    public List<URL> getExportedURLs() {
-        return metadataService
-                .getExportedURLs()
-                .stream()
-                .map(URL::valueOf)
-                .collect(Collectors.toList());
-    }
-
-    @Override
-    public boolean isExported() {
-        return exported;
-    }
-
-    @Override
-    public final boolean supports(String metadataType) {
-        MetadataServiceType metadataServiceType = getOrDefault(metadataType);
-        return supportedMetadataServiceTypes.contains(metadataServiceType);
-    }
-
-    @Override
-    public int getPriority() {
-        return priority;
-    }
-
-    /**
-     * Exports the {@link MetadataService}
-     *
-     * @throws Exception If some exception occurs
-     */
-    protected abstract void doExport() throws Exception;
-
-    /**
-     * Unexports the {@link MetadataService}
-     *
-     * @throws Exception If some exception occurs
-     */
-    protected abstract void doUnexport() throws Exception;
-
-    /**
-     * Get the underlying of {@link MetadataService}
-     *
-     * @return non-null
-     */
-    public WritableMetadataService getMetadataService() {
-        return metadataService;
-    }
-}
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java
index d89fb77..fdb011f 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/ConfigurableMetadataServiceExporter.java
@@ -17,6 +17,8 @@
 package org.apache.dubbo.config.metadata;
 
 import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.logger.Logger;
+import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.config.ApplicationConfig;
 import org.apache.dubbo.config.ProtocolConfig;
 import org.apache.dubbo.config.RegistryConfig;
@@ -24,15 +26,12 @@ import org.apache.dubbo.config.ServiceConfig;
 import org.apache.dubbo.config.context.ConfigManager;
 import org.apache.dubbo.metadata.MetadataService;
 import org.apache.dubbo.metadata.MetadataServiceExporter;
-import org.apache.dubbo.metadata.MetadataServiceType;
 import org.apache.dubbo.rpc.model.ApplicationModel;
 
 import java.util.ArrayList;
 import java.util.List;
 
 import static java.util.Collections.emptyList;
-import static java.util.EnumSet.allOf;
-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;
 import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;
 
 /**
@@ -50,41 +49,56 @@ import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;
  * @see ConfigManager
  * @since 2.7.5
  */
-public class ConfigurableMetadataServiceExporter extends AbstractMetadataServiceExporter {
+public class ConfigurableMetadataServiceExporter implements MetadataServiceExporter {
+
+    private final Logger logger = LoggerFactory.getLogger(getClass());
+
+    private final MetadataService metadataService;
 
     private volatile ServiceConfig<MetadataService> serviceConfig;
 
-    public ConfigurableMetadataServiceExporter() {
-        super(DEFAULT_METADATA_STORAGE_TYPE, MAX_PRIORITY, allOf(MetadataServiceType.class));
+    public ConfigurableMetadataServiceExporter(MetadataService metadataService) {
+        this.metadataService = metadataService;
     }
 
     @Override
-    protected void doExport() throws Exception {
-
-        ServiceConfig<MetadataService> serviceConfig = new ServiceConfig<>();
-        serviceConfig.setApplication(getApplicationConfig());
-        serviceConfig.setRegistries(getRegistries());
-        serviceConfig.setProtocol(generateMetadataProtocol());
-        serviceConfig.setInterface(MetadataService.class);
-        serviceConfig.setRef(metadataService);
-        serviceConfig.setGroup(getApplicationConfig().getName());
-        serviceConfig.setVersion(metadataService.version());
-
-        // export
-        serviceConfig.export();
-
-        if (logger.isInfoEnabled()) {
-            logger.info("The MetadataService exports urls : " + serviceConfig.getExportedUrls());
+    public ConfigurableMetadataServiceExporter export() {
+
+        if (!isExported()) {
+
+            ServiceConfig<MetadataService> serviceConfig = new ServiceConfig<>();
+            serviceConfig.setApplication(getApplicationConfig());
+            serviceConfig.setRegistries(getRegistries());
+            serviceConfig.setProtocol(generateMetadataProtocol());
+            serviceConfig.setInterface(MetadataService.class);
+            serviceConfig.setRef(metadataService);
+            serviceConfig.setGroup(getApplicationConfig().getName());
+            serviceConfig.setVersion(metadataService.version());
+
+            // export
+            serviceConfig.export();
+
+            if (logger.isInfoEnabled()) {
+                logger.info("The MetadataService exports urls : " + serviceConfig.getExportedUrls());
+            }
+
+            this.serviceConfig = serviceConfig;
+
+        } else {
+            if (logger.isWarnEnabled()) {
+                logger.warn("The MetadataService has been exported : " + serviceConfig.getExportedUrls());
+            }
         }
 
-        this.serviceConfig = serviceConfig;
+        return this;
     }
 
     @Override
-    protected void doUnexport() throws Exception {
-        if (serviceConfig != null) {
+    public ConfigurableMetadataServiceExporter unexport() {
+        if (isExported()) {
             serviceConfig.unexport();
         }
+        return this;
     }
 
     @Override
@@ -96,11 +110,6 @@ public class ConfigurableMetadataServiceExporter extends AbstractMetadataService
         return serviceConfig != null && serviceConfig.isExported();
     }
 
-    @Override
-    public int getPriority() {
-        return MAX_PRIORITY;
-    }
-
     private ApplicationConfig getApplicationConfig() {
         return ApplicationModel.getConfigManager().getApplication().get();
     }
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/RemoteMetadataServiceExporter.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/RemoteMetadataServiceExporter.java
deleted file mode 100644
index 6d48921..0000000
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/metadata/RemoteMetadataServiceExporter.java
+++ /dev/null
@@ -1,79 +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.config.metadata;
-
-import org.apache.dubbo.common.constants.CommonConstants;
-import org.apache.dubbo.metadata.MetadataServiceExporter;
-import org.apache.dubbo.metadata.MetadataServiceType;
-import org.apache.dubbo.metadata.URLRevisionResolver;
-import org.apache.dubbo.metadata.WritableMetadataService;
-import org.apache.dubbo.metadata.report.MetadataReport;
-import org.apache.dubbo.metadata.report.MetadataReportInstance;
-import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;
-
-import java.util.SortedSet;
-
-import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;
-
-/**
- * The implementation of {@link MetadataServiceExporter} for
- * {@link CommonConstants#REMOTE_METADATA_STORAGE_TYPE "remote" metadata storage type}
- *
- * @see MetadataServiceExporter
- * @since 2.7.8
- */
-public class RemoteMetadataServiceExporter extends AbstractMetadataServiceExporter {
-
-    private final URLRevisionResolver urlRevisionResolver;
-
-    public RemoteMetadataServiceExporter() {
-        super(REMOTE_METADATA_STORAGE_TYPE, MIN_PRIORITY, MetadataServiceType.REMOTE, MetadataServiceType.COMPOSITE);
-        this.urlRevisionResolver = URLRevisionResolver.INSTANCE;
-    }
-
-    @Override
-    protected void doExport() throws Exception {
-        WritableMetadataService metadataServiceDelegate = WritableMetadataService.getDefaultExtension();
-        if (publishServiceMetadata(metadataServiceDelegate)) {
-            publicConsumerMetadata(metadataServiceDelegate);
-        }
-    }
-
-    private boolean publishServiceMetadata(WritableMetadataService metadataServiceDelegate) {
-        String serviceName = metadataServiceDelegate.serviceName();
-        SortedSet<String> exportedURLs = metadataServiceDelegate.getExportedURLs();
-        String revision = urlRevisionResolver.resolve(exportedURLs);
-        return getMetadataReport().saveExportedURLs(serviceName, revision, exportedURLs);
-    }
-
-    private boolean publicConsumerMetadata(WritableMetadataService metadataServiceDelegate) {
-        String serviceName = metadataServiceDelegate.serviceName();
-        SortedSet<String> subscribedURLs = metadataServiceDelegate.getSubscribedURLs();
-        String revision = urlRevisionResolver.resolve(subscribedURLs);
-        getMetadataReport().saveSubscribedData(new SubscriberMetadataIdentifier(serviceName, revision), subscribedURLs);
-        return true;
-    }
-
-    private MetadataReport getMetadataReport() {
-        return MetadataReportInstance.getMetadataReport(true);
-    }
-
-    @Override
-    protected void doUnexport() throws Exception {
-        // DOES NOTHING
-    }
-}
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/event/listener/PublishingServiceDefinitionListenerTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/event/listener/PublishingServiceDefinitionListenerTest.java
index 67a562d..e7e5376 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/event/listener/PublishingServiceDefinitionListenerTest.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/event/listener/PublishingServiceDefinitionListenerTest.java
@@ -59,7 +59,7 @@ public class PublishingServiceDefinitionListenerTest {
         ApplicationConfig applicationConfig = new ApplicationConfig("dubbo-demo-provider");
         applicationConfig.setMetadataType(metadataType);
         configManager.setApplication(applicationConfig);
-        this.writableMetadataService = WritableMetadataService.getExtension(metadataType);
+        this.writableMetadataService = WritableMetadataService.getDefaultExtension();
     }
 
     @AfterEach
diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/metadata/RemoteMetadataServiceExporterTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/metadata/RemoteMetadataServiceExporterTest.java
deleted file mode 100644
index e4d13a1..0000000
--- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/metadata/RemoteMetadataServiceExporterTest.java
+++ /dev/null
@@ -1,106 +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.config.metadata;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.metadata.MetadataServiceExporter;
-import org.apache.dubbo.metadata.WritableMetadataService;
-import org.apache.dubbo.metadata.report.MetadataReportInstance;
-import org.apache.dubbo.rpc.model.ApplicationModel;
-import org.apache.dubbo.rpc.service.EchoService;
-
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import static java.util.Arrays.asList;
-import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.COMPOSITE_METADATA_STORAGE_TYPE;
-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;
-import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;
-import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;
-import static org.apache.dubbo.metadata.MetadataServiceExporter.getExtension;
-import static org.apache.dubbo.metadata.report.support.Constants.SYNC_REPORT_KEY;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-/**
- * {@link RemoteMetadataServiceExporter} Test-Cases
- *
- * @since 2.7.8
- */
-public class RemoteMetadataServiceExporterTest {
-
-    private static final URL METADATA_REPORT_URL = URL.valueOf("file://")
-            .addParameter(APPLICATION_KEY, "test")
-            .addParameter(SYNC_REPORT_KEY, "true");
-
-    private static final Class<EchoService> INTERFACE_CLASS = EchoService.class;
-
-    private static final String INTERFACE_NAME = INTERFACE_CLASS.getName();
-
-    private static final String APP_NAME = "test-service";
-
-    private static final URL BASE_URL = URL
-            .valueOf("dubbo://127.0.0.1:20880")
-            .setPath(INTERFACE_NAME)
-            .addParameter(APPLICATION_KEY, APP_NAME)
-            .addParameter(SIDE_KEY, "provider");
-
-    private final MetadataServiceExporter exporter = getExtension(REMOTE_METADATA_STORAGE_TYPE);
-
-    private WritableMetadataService writableMetadataService;
-
-    @BeforeEach
-    public void init() {
-        ApplicationModel.getConfigManager().setApplication(new ApplicationConfig(APP_NAME));
-        MetadataReportInstance.init(METADATA_REPORT_URL);
-        writableMetadataService = WritableMetadataService.getDefaultExtension();
-        writableMetadataService.exportURL(BASE_URL);
-    }
-
-    @AfterEach
-    public void reset() {
-        ApplicationModel.reset();
-    }
-
-    @Test
-    public void testType() {
-        assertEquals(RemoteMetadataServiceExporter.class, exporter.getClass());
-    }
-
-    @Test
-    public void testSupports() {
-        assertTrue(exporter.supports(REMOTE_METADATA_STORAGE_TYPE));
-        assertTrue(exporter.supports(COMPOSITE_METADATA_STORAGE_TYPE));
-        assertFalse(exporter.supports(DEFAULT_METADATA_STORAGE_TYPE));
-    }
-
-    @Test
-    public void testExportAndUnexport() {
-        assertFalse(exporter.isExported());
-        assertEquals(exporter, exporter.export());
-        assertTrue(exporter.isExported());
-
-        assertEquals(asList(BASE_URL), exporter.getExportedURLs());
-
-        assertEquals(exporter, exporter.unexport());
-        assertFalse(exporter.isExported());
-    }
-}
diff --git a/dubbo-dependencies-bom/pom.xml b/dubbo-dependencies-bom/pom.xml
index 92f2a90..9c40c96 100644
--- a/dubbo-dependencies-bom/pom.xml
+++ b/dubbo-dependencies-bom/pom.xml
@@ -97,7 +97,7 @@
         <grizzly_version>2.1.4</grizzly_version>
         <httpclient_version>4.5.3</httpclient_version>
         <httpcore_version>4.4.6</httpcore_version>
-        <fastjson_version>1.2.68</fastjson_version>
+        <fastjson_version>1.2.70</fastjson_version>
         <zookeeper_version>3.4.13</zookeeper_version>
         <curator_version>4.0.1</curator_version>
         <curator_test_version>2.12.0</curator_test_version>
@@ -130,7 +130,7 @@
         <resteasy_version>3.0.19.Final</resteasy_version>
         <tomcat_embed_version>8.5.31</tomcat_embed_version>
         <jetcd_version>0.4.1</jetcd_version>
-        <nacos_version>1.1.1</nacos_version>
+        <nacos_version>1.3.1</nacos_version>
         <grpc.version>1.22.1</grpc.version>
         <!-- Log libs -->
         <slf4j_version>1.7.25</slf4j_version>
@@ -146,13 +146,13 @@
         <eureka.version>1.9.12</eureka.version>
 
         <!-- Alibaba -->
-        <alibaba_spring_context_support_version>1.0.6</alibaba_spring_context_support_version>
+        <alibaba_spring_context_support_version>1.0.8</alibaba_spring_context_support_version>
 
         <jaxb_version>2.2.7</jaxb_version>
         <activation_version>1.2.0</activation_version>
         <test_container_version>1.11.2</test_container_version>
         <etcd_launcher_version>0.3.0</etcd_launcher_version>
-        <hessian_lite_version>3.2.7</hessian_lite_version>
+        <hessian_lite_version>3.2.8</hessian_lite_version>
         <swagger_version>1.5.19</swagger_version>
         <spring_test_version>4.3.16.RELEASE</spring_test_version>
 
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/CompositeServiceNameMapping.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/CompositeServiceNameMapping.java
deleted file mode 100644
index 9ad130b..0000000
--- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/CompositeServiceNameMapping.java
+++ /dev/null
@@ -1,96 +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.metadata;
-
-
-import org.apache.dubbo.common.URL;
-
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
-import static java.util.Collections.emptySet;
-import static java.util.Collections.unmodifiableSet;
-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;
-import static org.apache.dubbo.common.utils.CollectionUtils.isNotEmpty;
-
-/**
- * The composite implementation of {@link ServiceNameMapping}
- *
- * @see ParameterizedServiceNameMapping
- * @see PropertiesFileServiceNameMapping
- * @see DynamicConfigurationServiceNameMapping
- * @since 2.7.8
- */
-public class CompositeServiceNameMapping implements ServiceNameMapping {
-
-    private volatile List<ServiceNameMapping> serviceNameMappings;
-
-    private List<ServiceNameMapping> getServiceNameMappings() {
-        if (this.serviceNameMappings == null) {
-            synchronized (this) {
-                if (this.serviceNameMappings == null) {
-                    Set<ServiceNameMapping> serviceNameMappings = loadAllServiceNameMappings();
-
-                    removeSelf(serviceNameMappings);
-
-                    this.serviceNameMappings = new LinkedList<>(serviceNameMappings);
-                }
-            }
-        }
-        return this.serviceNameMappings;
-    }
-
-    private Set<ServiceNameMapping> loadAllServiceNameMappings() {
-        return getExtensionLoader(ServiceNameMapping.class).getSupportedExtensionInstances();
-    }
-
-    private void removeSelf(Set<ServiceNameMapping> serviceNameMappings) {
-        Iterator<ServiceNameMapping> iterator = serviceNameMappings.iterator();
-        while (iterator.hasNext()) {
-            ServiceNameMapping serviceNameMapping = iterator.next();
-            if (this.getClass().equals(serviceNameMapping.getClass())) {
-                iterator.remove(); // Remove self
-            }
-        }
-    }
-
-    @Override
-    public void map(URL exportedURL) {
-        List<ServiceNameMapping> serviceNameMappings = getServiceNameMappings();
-        serviceNameMappings.forEach(serviceNameMapping -> serviceNameMapping.map(exportedURL));
-    }
-
-    @Override
-    public Set<String> get(URL subscribedURL) {
-        List<ServiceNameMapping> serviceNameMappings = getServiceNameMappings();
-        Set<String> serviceNames = null;
-        for (ServiceNameMapping serviceNameMapping : serviceNameMappings) {
-            serviceNames = serviceNameMapping.get(subscribedURL);
-            if (isNotEmpty(serviceNames)) {
-                break;
-            }
-        }
-        return serviceNames == null ? emptySet() : unmodifiableSet(serviceNames);
-    }
-
-    @Override
-    public int getPriority() {
-        return MIN_PRIORITY;
-    }
-}
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java
index e3f6881..f479830 100644
--- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java
+++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataInfo.java
@@ -36,7 +36,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import static org.apache.dubbo.common.constants.CommonConstants.DOT_SEPARATOR;
-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_CHAR_SEPERATOR;
+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_CHAR_SEPARATOR;
 import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.METHODS_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;
@@ -236,7 +236,7 @@ public class MetadataInfo implements Serializable {
         private String buildMatchKey() {
             matchKey = getServiceKey();
             if (StringUtils.isNotEmpty(protocol)) {
-                matchKey = getServiceKey() + GROUP_CHAR_SEPERATOR + protocol;
+                matchKey = getServiceKey() + GROUP_CHAR_SEPARATOR + protocol;
             }
             return matchKey;
         }
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/ParameterizedServiceNameMapping.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/ParameterizedServiceNameMapping.java
deleted file mode 100644
index 893a6f4..0000000
--- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/ParameterizedServiceNameMapping.java
+++ /dev/null
@@ -1,47 +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.metadata;
-
-import org.apache.dubbo.common.URL;
-
-import java.util.Set;
-
-import static org.apache.dubbo.common.constants.RegistryConstants.SUBSCRIBED_SERVICE_NAMES_KEY;
-
-/**
- * The parameterized implementation of {@link ServiceNameMapping}
- *
- * @see ReadOnlyServiceNameMapping
- * @since 2.7.8
- */
-public class ParameterizedServiceNameMapping extends ReadOnlyServiceNameMapping {
-
-    /**
-     * The priority of {@link PropertiesFileServiceNameMapping}
-     */
-    static final int PRIORITY = MAX_PRIORITY + 99;
-
-    @Override
-    public Set<String> get(URL subscribedURL) {
-        return getValue(subscribedURL.getParameter(SUBSCRIBED_SERVICE_NAMES_KEY));
-    }
-
-    @Override
-    public int getPriority() {
-        return PRIORITY;
-    }
-}
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/PropertiesFileServiceNameMapping.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/PropertiesFileServiceNameMapping.java
deleted file mode 100644
index 7870895..0000000
--- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/PropertiesFileServiceNameMapping.java
+++ /dev/null
@@ -1,148 +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.metadata;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.config.Configuration;
-import org.apache.dubbo.common.constants.CommonConstants;
-import org.apache.dubbo.common.utils.ClassUtils;
-import org.apache.dubbo.common.utils.PathUtils;
-import org.apache.dubbo.common.utils.StringUtils;
-import org.apache.dubbo.rpc.model.ApplicationModel;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.Enumeration;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Properties;
-import java.util.Set;
-
-import static java.lang.String.format;
-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_SERVICE_NAME_MAPPING_PROPERTIES_PATH;
-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.SERVICE_NAME_MAPPING_PROPERTIES_FILE_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;
-import static org.apache.dubbo.common.utils.StringUtils.SLASH;
-import static org.apache.dubbo.metadata.MetadataConstants.KEY_SEPARATOR;
-
-/**
- * The externalized {@link Properties} file implementation of {@link ServiceNameMapping},
- * the default properties class path is
- * {@link CommonConstants#DEFAULT_SERVICE_NAME_MAPPING_PROPERTIES_PATH "/META-INF/dubbo/service-name-mapping.properties"},
- * whose format as following:
- * <pre>
- * dubbo\:com.acme.Interface1\:default = Service1
- * thirft\:com.acme.InterfaceX = Service1,Service2
- * rest\:com.acme.interfaceN = Service3
- * </pre>
- * <p>
- * THe search path could be configured by the externalized property {@link CommonConstants#SERVICE_NAME_MAPPING_PROPERTIES_FILE_KEY}
- *
- * @see ReadOnlyServiceNameMapping
- * @see ParameterizedServiceNameMapping
- * @since 2.7.8
- */
-public class PropertiesFileServiceNameMapping extends ReadOnlyServiceNameMapping {
-
-    /**
-     * The priority of {@link PropertiesFileServiceNameMapping} is
-     * lower than {@link ParameterizedServiceNameMapping}
-     */
-    static final int PRIORITY = ParameterizedServiceNameMapping.PRIORITY + 1;
-
-
-    private final List<Properties> propertiesList;
-
-    public PropertiesFileServiceNameMapping() {
-        this.propertiesList = loadPropertiesList();
-    }
-
-    @Override
-    public Set<String> get(URL subscribedURL) {
-        String propertyKey = getPropertyKey(subscribedURL);
-        String propertyValue = null;
-
-        for (Properties properties : propertiesList) {
-            propertyValue = properties.getProperty(propertyKey);
-            if (propertyValue != null) {
-                break;
-            }
-        }
-
-        return getValue(propertyValue);
-    }
-
-    private String getPropertyKey(URL url) {
-        String protocol = url.getProtocol();
-        String serviceInterface = url.getServiceInterface();
-        // Optional
-        String group = url.getParameter(GROUP_KEY);
-        String version = url.getParameter(VERSION_KEY);
-
-        StringBuilder propertyKeyBuilder = new StringBuilder(protocol)
-                .append(KEY_SEPARATOR)
-                .append(serviceInterface);
-
-        appendIfPresent(propertyKeyBuilder, group);
-        appendIfPresent(propertyKeyBuilder, version);
-
-        return propertyKeyBuilder.toString();
-    }
-
-    private void appendIfPresent(StringBuilder builder, String value) {
-        if (!StringUtils.isBlank(value)) {
-            builder.append(KEY_SEPARATOR).append(value);
-        }
-    }
-
-    private List<Properties> loadPropertiesList() {
-        List<Properties> propertiesList = new LinkedList<>();
-        String propertiesPath = getPropertiesPath();
-        try {
-            Enumeration<java.net.URL> resources = ClassUtils.getClassLoader().getResources(propertiesPath);
-            while (resources.hasMoreElements()) {
-                java.net.URL resource = resources.nextElement();
-                InputStream inputStream = resource.openStream();
-                Properties properties = new Properties();
-                properties.load(new InputStreamReader(inputStream, "UTF-8"));
-                propertiesList.add(properties);
-            }
-        } catch (IOException e) {
-            if (logger.isErrorEnabled()) {
-                logger.error(format("The path of ServiceNameMapping's Properties file[path : %s] can't be loaded", propertiesPath), e);
-            }
-        }
-        return propertiesList;
-    }
-
-    private String getPropertiesPath() {
-        Configuration configuration = ApplicationModel.getEnvironment().getConfiguration();
-        String propertyPath = configuration.getString(SERVICE_NAME_MAPPING_PROPERTIES_FILE_KEY, DEFAULT_SERVICE_NAME_MAPPING_PROPERTIES_PATH);
-        propertyPath = PathUtils.normalize(propertyPath);
-        if (propertyPath.startsWith(SLASH)) {
-            propertyPath = propertyPath.substring(SLASH.length());
-        }
-        return propertyPath;
-    }
-
-    @Override
-    public int getPriority() {
-        return PRIORITY;
-    }
-}
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/ReadOnlyServiceNameMapping.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/ReadOnlyServiceNameMapping.java
deleted file mode 100644
index 58035d3..0000000
--- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/ReadOnlyServiceNameMapping.java
+++ /dev/null
@@ -1,45 +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.metadata;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.logger.Logger;
-import org.apache.dubbo.common.logger.LoggerFactory;
-
-import java.util.Set;
-
-import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SEPARATOR_CHAR;
-import static org.apache.dubbo.common.utils.StringUtils.splitToSet;
-
-/**
- * Read-Only implementation of {@link ServiceNameMapping}
- *
- * @since 2.7.8
- */
-public abstract class ReadOnlyServiceNameMapping implements ServiceNameMapping {
-
-    protected final Logger logger = LoggerFactory.getLogger(getClass());
-
-    @Override
-    public void map(URL exportedURL) {
-        // DO NOTING for mapping
-    }
-
-    protected Set<String> getValue(String rawValue) {
-        return splitToSet(rawValue, COMMA_SEPARATOR_CHAR, true);
-    }
-}
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java
index f3b90db..1d39401 100644
--- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java
+++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java
@@ -44,7 +44,6 @@ import java.nio.channels.FileChannel;
 import java.nio.channels.FileLock;
 import java.util.ArrayList;
 import java.util.Calendar;
-import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -53,6 +52,7 @@ import java.util.Set;
 import java.util.SortedSet;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.ThreadLocalRandom;
@@ -61,15 +61,11 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 
-import static java.util.concurrent.Executors.newScheduledThreadPool;
-import static java.util.concurrent.Executors.newSingleThreadExecutor;
-import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
 import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;
 import static org.apache.dubbo.common.constants.CommonConstants.FILE_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE;
 import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;
-import static org.apache.dubbo.common.utils.StringUtils.replace;
 import static org.apache.dubbo.metadata.report.support.Constants.CYCLE_REPORT_KEY;
 import static org.apache.dubbo.metadata.report.support.Constants.DEFAULT_METADATA_REPORT_CYCLE_REPORT;
 import static org.apache.dubbo.metadata.report.support.Constants.DEFAULT_METADATA_REPORT_RETRY_PERIOD;
@@ -90,52 +86,24 @@ public abstract class AbstractMetadataReport implements MetadataReport {
     // Log output
     protected final Logger logger = LoggerFactory.getLogger(getClass());
 
-    private final AtomicBoolean initialized = new AtomicBoolean(false);
-
+    // Local disk cache, where the special key value.registries records the list of metadata centers, and the others are the list of notified service providers
+    final Properties properties = new Properties();
+    private final ExecutorService reportCacheExecutor = Executors.newFixedThreadPool(1, new NamedThreadFactory("DubboSaveMetadataReport", true));
     final Map<MetadataIdentifier, Object> allMetadataReports = new ConcurrentHashMap<>(4);
 
+    private final AtomicLong lastCacheChanged = new AtomicLong();
     final Map<MetadataIdentifier, Object> failedReports = new ConcurrentHashMap<>(4);
-
     private URL reportURL;
     boolean syncReport;
-
     // Local disk cache file
-    File localCacheFile;
-    // Local disk cache, where the special key value.registries records the list of metadata centers, and the others are the list of notified service providers
-    final Properties properties = new Properties();
-
-    private final AtomicLong lastCacheChanged = new AtomicLong();
-
-    // ThreadPoolExecutors
-    private final ExecutorService reportCacheExecutor;
-
-    public final MetadataReportRetry metadataReportRetry;
-
-    private final ScheduledExecutorService cycleReportExecutor;
+    File file;
+    private AtomicBoolean initialized = new AtomicBoolean(false);
+    public MetadataReportRetry metadataReportRetry;
 
     public AbstractMetadataReport(URL reportServerURL) {
         setUrl(reportServerURL);
-
-        this.localCacheFile = initializeLocalCacheFile(reportServerURL);
-        loadProperties();
-        syncReport = reportServerURL.getParameter(SYNC_REPORT_KEY, false);
-        metadataReportRetry = new MetadataReportRetry(reportServerURL.getParameter(RETRY_TIMES_KEY, DEFAULT_METADATA_REPORT_RETRY_TIMES),
-                reportServerURL.getParameter(RETRY_PERIOD_KEY, DEFAULT_METADATA_REPORT_RETRY_PERIOD));
-        this.reportCacheExecutor = newSingleThreadExecutor(new NamedThreadFactory("DubboSaveMetadataReport", true));
-        this.cycleReportExecutor = newSingleThreadScheduledExecutor(new NamedThreadFactory("DubboMetadataReportTimer", true));
-        // cycle report the data switch
-        if (reportServerURL.getParameter(CYCLE_REPORT_KEY, DEFAULT_METADATA_REPORT_CYCLE_REPORT)) {
-            cycleReportExecutor.scheduleAtFixedRate(this::publishAll, calculateStartTime(), ONE_DAY_IN_MILLISECONDS, TimeUnit.MILLISECONDS);
-        }
-    }
-
-    private File initializeLocalCacheFile(URL reportServerURL) {
         // Start file save timer
-        String defaultFilename = System.getProperty("user.home") +
-                "/.dubbo/dubbo-metadata-" +
-                reportServerURL.getParameter(APPLICATION_KEY) + "-" +
-                replace(reportServerURL.getAddress(), ":", "-") +
-                ".cache";
+        String defaultFilename = System.getProperty("user.home") + "/.dubbo/dubbo-metadata-" + reportServerURL.getParameter(APPLICATION_KEY) + "-" + reportServerURL.getAddress().replaceAll(":", "-") + ".cache";
         String filename = reportServerURL.getParameter(FILE_KEY, defaultFilename);
         File file = null;
         if (ConfigUtils.isNotEmpty(filename)) {
@@ -150,7 +118,16 @@ public abstract class AbstractMetadataReport implements MetadataReport {
                 file.delete();
             }
         }
-        return file;
+        this.file = file;
+        loadProperties();
+        syncReport = reportServerURL.getParameter(SYNC_REPORT_KEY, false);
+        metadataReportRetry = new MetadataReportRetry(reportServerURL.getParameter(RETRY_TIMES_KEY, DEFAULT_METADATA_REPORT_RETRY_TIMES),
+                reportServerURL.getParameter(RETRY_PERIOD_KEY, DEFAULT_METADATA_REPORT_RETRY_PERIOD));
+        // cycle report the data switch
+        if (reportServerURL.getParameter(CYCLE_REPORT_KEY, DEFAULT_METADATA_REPORT_CYCLE_REPORT)) {
+            ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("DubboMetadataReportTimer", true));
+            scheduler.scheduleAtFixedRate(this::publishAll, calculateStartTime(), ONE_DAY_IN_MILLISECONDS, TimeUnit.MILLISECONDS);
+        }
     }
 
     public URL getUrl() {
@@ -168,12 +145,12 @@ public abstract class AbstractMetadataReport implements MetadataReport {
         if (version < lastCacheChanged.get()) {
             return;
         }
-        if (localCacheFile == null) {
+        if (file == null) {
             return;
         }
         // Save
         try {
-            File lockfile = new File(localCacheFile.getAbsolutePath() + ".lock");
+            File lockfile = new File(file.getAbsolutePath() + ".lock");
             if (!lockfile.exists()) {
                 lockfile.createNewFile();
             }
@@ -181,14 +158,14 @@ public abstract class AbstractMetadataReport implements MetadataReport {
                  FileChannel channel = raf.getChannel()) {
                 FileLock lock = channel.tryLock();
                 if (lock == null) {
-                    throw new IOException("Can not lock the metadataReport cache file " + localCacheFile.getAbsolutePath() + ", ignore and retry later, maybe multi java process use the file, please config: dubbo.metadata.file=xxx.properties");
+                    throw new IOException("Can not lock the metadataReport cache file " + file.getAbsolutePath() + ", ignore and retry later, maybe multi java process use the file, please config: dubbo.metadata.file=xxx.properties");
                 }
                 // Save
                 try {
-                    if (!localCacheFile.exists()) {
-                        localCacheFile.createNewFile();
+                    if (!file.exists()) {
+                        file.createNewFile();
                     }
-                    try (FileOutputStream outputFile = new FileOutputStream(localCacheFile)) {
+                    try (FileOutputStream outputFile = new FileOutputStream(file)) {
                         properties.store(outputFile, "Dubbo metadataReport Cache");
                     }
                 } finally {
@@ -206,20 +183,20 @@ public abstract class AbstractMetadataReport implements MetadataReport {
     }
 
     void loadProperties() {
-        if (localCacheFile != null && localCacheFile.exists()) {
-            try (InputStream in = new FileInputStream(localCacheFile)) {
+        if (file != null && file.exists()) {
+            try (InputStream in = new FileInputStream(file)) {
                 properties.load(in);
                 if (logger.isInfoEnabled()) {
-                    logger.info("Load service store file " + localCacheFile + ", data: " + properties);
+                    logger.info("Load service store file " + file + ", data: " + properties);
                 }
             } catch (Throwable e) {
-                logger.warn("Failed to load service store file " + localCacheFile, e);
+                logger.warn("Failed to load service store file " + file, e);
             }
         }
     }
 
     private void saveProperties(MetadataIdentifier metadataIdentifier, String value, boolean add, boolean sync) {
-        if (localCacheFile == null) {
+        if (file == null) {
             return;
         }
 
@@ -341,7 +318,7 @@ public abstract class AbstractMetadataReport implements MetadataReport {
     }
 
     @Override
-    public void saveSubscribedData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, Collection<String> urls) {
+    public void saveSubscribedData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, Set<String> urls) {
         if (syncReport) {
             doSaveSubscriberData(subscriberMetadataIdentifier, new Gson().toJson(urls));
         } else {
@@ -351,7 +328,7 @@ public abstract class AbstractMetadataReport implements MetadataReport {
 
 
     @Override
-    public Set<String> getSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier) {
+    public List<String> getSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier) {
         String content = doGetSubscribedURLs(subscriberMetadataIdentifier);
         Type setType = new TypeToken<SortedSet<String>>() {
         }.getType();
@@ -415,7 +392,7 @@ public abstract class AbstractMetadataReport implements MetadataReport {
     class MetadataReportRetry {
         protected final Logger logger = LoggerFactory.getLogger(getClass());
 
-        final ScheduledExecutorService retryExecutor = newScheduledThreadPool(0, new NamedThreadFactory("DubboMetadataReportRetryTimer", true));
+        final ScheduledExecutorService retryExecutor = Executors.newScheduledThreadPool(0, new NamedThreadFactory("DubboMetadataReportRetryTimer", true));
         volatile ScheduledFuture retryScheduledFuture;
         final AtomicInteger retryCounter = new AtomicInteger(0);
         // retry task schedule period
@@ -458,10 +435,8 @@ public abstract class AbstractMetadataReport implements MetadataReport {
         }
 
         void cancelRetryTask() {
-            if (retryScheduledFuture != null) {
-                retryScheduledFuture.cancel(false);
-            }
-            shutdown(retryExecutor);
+            retryScheduledFuture.cancel(false);
+            retryExecutor.shutdown();
         }
     }
 
@@ -476,13 +451,6 @@ public abstract class AbstractMetadataReport implements MetadataReport {
         doSaveSubscriberData(subscriberMetadataIdentifier, encodedUrlList);
     }
 
-    @Override
-    public final void close() throws Exception {
-        this.shutdownThreadPoolExecutors();
-        this.clearCache();
-        doClose();
-    }
-
     protected abstract void doStoreProviderMetadata(MetadataIdentifier providerMetadataIdentifier, String serviceDefinitions);
 
     protected abstract void doStoreConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, String serviceParameterString);
@@ -497,35 +465,4 @@ public abstract class AbstractMetadataReport implements MetadataReport {
 
     protected abstract String doGetSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier);
 
-    /**
-     * Close other resources
-     *
-     * @since 2.7.8
-     */
-    protected void doClose() throws Exception {
-
-    }
-
-    private void clearCache() {
-        this.properties.clear();
-        this.allMetadataReports.clear();
-        this.failedReports.clear();
-        this.localCacheFile.delete();
-    }
-
-    private void shutdownThreadPoolExecutors() {
-        this.metadataReportRetry.cancelRetryTask();
-        shutdown(this.reportCacheExecutor);
-        shutdown(cycleReportExecutor);
-    }
-
-    private static void shutdown(ExecutorService executorService) {
-        if (executorService == null) {
-            return;
-        }
-        if (!executorService.isShutdown()) {
-            executorService.shutdown();
-        }
-    }
-
 }
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/ConfigCenterBasedMetadataReport.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/ConfigCenterBasedMetadataReport.java
deleted file mode 100644
index d962ca5..0000000
--- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/ConfigCenterBasedMetadataReport.java
+++ /dev/null
@@ -1,162 +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.metadata.report.support;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
-import org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory;
-import org.apache.dubbo.metadata.report.MetadataReport;
-import org.apache.dubbo.metadata.report.identifier.BaseMetadataIdentifier;
-import org.apache.dubbo.metadata.report.identifier.KeyTypeEnum;
-import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;
-import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier;
-import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;
-
-import java.util.List;
-
-import static org.apache.dubbo.common.config.configcenter.DynamicConfigurationFactory.getDynamicConfigurationFactory;
-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
-import static org.apache.dubbo.metadata.MetadataConstants.EXPORTED_URLS_TAG;
-
-/**
- * The generic implementation of {@link MetadataReport} based on {@link DynamicConfiguration
- * the config-center infrastructure}
- *
- * @see AbstractMetadataReport
- * @since 2.7.8
- */
-public class ConfigCenterBasedMetadataReport extends AbstractMetadataReport {
-
-    private final KeyTypeEnum keyType;
-
-    private final String group;
-
-    private final DynamicConfiguration dynamicConfiguration;
-
-    public ConfigCenterBasedMetadataReport(URL reportServerURL, KeyTypeEnum keyTypeEnum) {
-        super(reportServerURL);
-        this.keyType = keyTypeEnum;
-        this.group = reportServerURL.getParameter(GROUP_KEY, DEFAULT_ROOT);
-        String extensionName = reportServerURL.getProtocol();
-        DynamicConfigurationFactory dynamicConfigurationFactory = getDynamicConfigurationFactory(extensionName);
-        dynamicConfiguration = dynamicConfigurationFactory.getDynamicConfiguration(reportServerURL);
-    }
-
-
-    @Override
-    protected void doStoreProviderMetadata(MetadataIdentifier providerMetadataIdentifier, String serviceDefinitions) {
-        saveMetadata(providerMetadataIdentifier, serviceDefinitions);
-    }
-
-    @Override
-    protected void doStoreConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, String serviceParameterString) {
-        saveMetadata(consumerMetadataIdentifier, serviceParameterString);
-    }
-
-    @Override
-    protected void doSaveMetadata(ServiceMetadataIdentifier metadataIdentifier, URL url) {
-        saveMetadata(metadataIdentifier, URL.encode(url.toFullString()));
-    }
-
-    @Override
-    protected void doRemoveMetadata(ServiceMetadataIdentifier metadataIdentifier) {
-        removeMetadata(metadataIdentifier);
-    }
-
-    @Override
-    protected List<String> doGetExportedURLs(ServiceMetadataIdentifier metadataIdentifier) {
-        throw new UnsupportedOperationException("doGetExportedURLs method will not be supported!");
-    }
-
-    @Override
-    protected void doSaveSubscriberData(SubscriberMetadataIdentifier subscriberMetadataIdentifier, String urlListStr) {
-        saveMetadata(subscriberMetadataIdentifier, urlListStr);
-    }
-
-    @Override
-    protected String doGetSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier) {
-        return getMetadata(subscriberMetadataIdentifier);
-    }
-
-    @Override
-    public String getServiceDefinition(MetadataIdentifier metadataIdentifier) {
-        return getMetadata(metadataIdentifier);
-    }
-
-    @Override
-    public boolean saveExportedURLs(String serviceName, String exportedServicesRevision, String exportedURLsContent) {
-        String key = buildExportedURLsMetadataKey(serviceName, exportedServicesRevision);
-        return dynamicConfiguration.publishConfig(key, group, exportedURLsContent);
-    }
-
-    @Override
-    public String getExportedURLsContent(String serviceName, String exportedServicesRevision) {
-        String key = buildExportedURLsMetadataKey(serviceName, exportedServicesRevision);
-        return dynamicConfiguration.getConfig(key, group);
-    }
-
-    private String buildExportedURLsMetadataKey(String serviceName, String exportedServicesRevision) {
-        return keyType.build(EXPORTED_URLS_TAG, serviceName, exportedServicesRevision);
-    }
-
-    protected void saveMetadata(BaseMetadataIdentifier metadataIdentifier, String value) {
-        String key = getKey(metadataIdentifier);
-        dynamicConfiguration.publishConfig(key, group, value);
-    }
-
-    protected void saveMetadata(MetadataIdentifier metadataIdentifier, String value) {
-        String key = getKey(metadataIdentifier);
-        dynamicConfiguration.publishConfig(key, group, value);
-    }
-
-    protected String getMetadata(ServiceMetadataIdentifier metadataIdentifier) {
-        String key = getKey(metadataIdentifier);
-        return dynamicConfiguration.getConfig(key, group);
-    }
-
-    protected String getMetadata(MetadataIdentifier metadataIdentifier) {
-        String key = getKey(metadataIdentifier);
-        return dynamicConfiguration.getConfig(key, group);
-    }
-
-    protected String getMetadata(SubscriberMetadataIdentifier metadataIdentifier) {
-        String key = getKey(metadataIdentifier);
-        return dynamicConfiguration.getConfig(key, group);
-    }
-
-    protected void removeMetadata(MetadataIdentifier metadataIdentifier) {
-        String key = getKey(metadataIdentifier);
-        dynamicConfiguration.removeConfig(key, group);
-    }
-
-    protected void removeMetadata(ServiceMetadataIdentifier metadataIdentifier) {
-        String key = getKey(metadataIdentifier);
-        dynamicConfiguration.removeConfig(key, group);
-    }
-
-    protected String getKey(BaseMetadataIdentifier metadataIdentifier) {
-        return metadataIdentifier.getUniqueKey(keyType);
-    }
-
-    protected String getKey(MetadataIdentifier metadataIdentifier) {
-        return metadataIdentifier.getUniqueKey(keyType);
-    }
-
-    protected void doClose() throws Exception {
-        this.dynamicConfiguration.close();
-    }
-}
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/ConfigCenterBasedMetadataReportFactory.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/ConfigCenterBasedMetadataReportFactory.java
deleted file mode 100644
index b445feb..0000000
--- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/ConfigCenterBasedMetadataReportFactory.java
+++ /dev/null
@@ -1,90 +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.metadata.report.support;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
-import org.apache.dubbo.metadata.report.MetadataReport;
-import org.apache.dubbo.metadata.report.MetadataReportFactory;
-import org.apache.dubbo.metadata.report.identifier.KeyTypeEnum;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import static org.apache.dubbo.common.config.configcenter.TreePathDynamicConfiguration.CONFIG_ROOT_PATH_PARAM_NAME;
-import static org.apache.dubbo.common.utils.StringUtils.SLASH;
-import static org.apache.dubbo.common.utils.StringUtils.isBlank;
-import static org.apache.dubbo.metadata.report.identifier.KeyTypeEnum.PATH;
-import static org.apache.dubbo.rpc.cluster.Constants.EXPORT_KEY;
-import static org.apache.dubbo.rpc.cluster.Constants.REFER_KEY;
-
-/**
- * The abstract implementation of {@link MetadataReportFactory} based on
- * {@link DynamicConfiguration the config-center infrastructure}
- *
- * @see MetadataReportFactory
- * @see MetadataReport
- * @see DynamicConfiguration
- * @since 2.7.8
- */
-public abstract class ConfigCenterBasedMetadataReportFactory implements MetadataReportFactory {
-
-    /**
-     * org.apache.dubbo.metadata.report.MetadataReport
-     */
-    private static final String URL_PATH = MetadataReport.class.getName();
-
-    // Registry Collection Map<metadataAddress, MetadataReport>
-    private static final Map<String, ConfigCenterBasedMetadataReport> metadataReportCache = new ConcurrentHashMap();
-
-    private final KeyTypeEnum keyType;
-
-    public ConfigCenterBasedMetadataReportFactory(KeyTypeEnum keyType) {
-        if (keyType == null) {
-            throw new NullPointerException("The keyType argument must not be null!");
-        }
-        this.keyType = keyType;
-    }
-
-    @Override
-    public ConfigCenterBasedMetadataReport getMetadataReport(URL url) {
-        url = url.setPath(URL_PATH);
-        final URL actualURL = resolveURLParameters(url);
-        String key = actualURL.toServiceString();
-        // Lock the metadata access process to ensure a single instance of the metadata instance
-        return metadataReportCache.computeIfAbsent(key, k -> new ConfigCenterBasedMetadataReport(actualURL, keyType));
-    }
-
-    private URL resolveURLParameters(URL url) {
-        URL resolvedURL = url.removeParameters(EXPORT_KEY, REFER_KEY);
-        if (PATH.equals(getKeyType())) { // Only handles for "PATH" type
-            if (isBlank(resolvedURL.getParameter(CONFIG_ROOT_PATH_PARAM_NAME))) {
-                resolvedURL = resolvedURL.addParameter(CONFIG_ROOT_PATH_PARAM_NAME, SLASH);
-            }
-        }
-        return resolvedURL;
-    }
-
-    /**
-     * Get {@link KeyTypeEnum the key type}
-     *
-     * @return non-null
-     */
-    protected KeyTypeEnum getKeyType() {
-        return keyType;
-    }
-}
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/file/FileSystemMetadataReportFactory.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/file/FileSystemMetadataReportFactory.java
deleted file mode 100644
index c4cc487..0000000
--- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/file/FileSystemMetadataReportFactory.java
+++ /dev/null
@@ -1,33 +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.metadata.report.support.file;
-
-import org.apache.dubbo.metadata.report.identifier.KeyTypeEnum;
-import org.apache.dubbo.metadata.report.support.ConfigCenterBasedMetadataReportFactory;
-
-/**
- * The implementation of {@link ConfigCenterBasedMetadataReportFactory} based on File System
- *
- * @see ConfigCenterBasedMetadataReportFactory
- * @since 2.7.8
- */
-public class FileSystemMetadataReportFactory extends ConfigCenterBasedMetadataReportFactory {
-
-    public FileSystemMetadataReportFactory() {
-        super(KeyTypeEnum.PATH);
-    }
-}
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.MetadataParamsFilter b/dubbo-metadata/dubbo-metadata-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.MetadataParamsFilter
new file mode 100644
index 0000000..6754126
--- /dev/null
+++ b/dubbo-metadata/dubbo-metadata-api/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.metadata.MetadataParamsFilter
@@ -0,0 +1 @@
+default=org.apache.dubbo.metadata.DefaultMetadataParamsFilter
\ No newline at end of file
diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/CompositeServiceNameMappingTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/CompositeServiceNameMappingTest.java
deleted file mode 100644
index 48243f8..0000000
--- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/CompositeServiceNameMappingTest.java
+++ /dev/null
@@ -1,107 +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.metadata;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.config.configcenter.file.FileSystemDynamicConfiguration;
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.rpc.model.ApplicationModel;
-import org.apache.dubbo.rpc.service.EchoService;
-
-import org.apache.commons.io.FileUtils;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import java.util.Set;
-
-import static java.util.Collections.singleton;
-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;
-import static org.apache.dubbo.common.constants.RegistryConstants.SUBSCRIBED_SERVICE_NAMES_KEY;
-import static org.apache.dubbo.common.utils.CollectionUtils.ofSet;
-import static org.apache.dubbo.metadata.DynamicConfigurationServiceNameMapping.buildGroup;
-import static org.apache.dubbo.rpc.model.ApplicationModel.getApplicationConfig;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-/**
- * {@link CompositeServiceNameMapping} Test
- *
- * @since 2.7.8
- */
-public class CompositeServiceNameMappingTest {
-
-    private static final URL BASE_URL = URL.valueOf("dubbo://127.0.0.1:20880")
-            .setPath(EchoService.class.getName())
-            .addParameter(GROUP_KEY, "default")
-            .addParameter(VERSION_KEY, "1.0.0");
-
-    private static final String APP_NAME = "test-service";
-
-    private ServiceNameMapping serviceNameMapping;
-
-    private FileSystemDynamicConfiguration dynamicConfiguration;
-
-    @BeforeEach
-    public void init() {
-        serviceNameMapping = ServiceNameMapping.getDefaultExtension();
-        dynamicConfiguration = new FileSystemDynamicConfiguration();
-        ApplicationModel.getConfigManager().setApplication(new ApplicationConfig(APP_NAME));
-        ApplicationModel.getEnvironment().setDynamicConfiguration(dynamicConfiguration);
-    }
-
-    @AfterEach
-    public void reset() {
-        FileUtils.deleteQuietly(dynamicConfiguration.getRootDirectory());
-        ApplicationModel.reset();
-    }
-
-    @Test
-    public void testType() {
-        assertEquals(CompositeServiceNameMapping.class, serviceNameMapping.getClass());
-    }
-
-    @Test
-    public void testMap() {
-        serviceNameMapping.map(BASE_URL);
-        assertNotNull(dynamicConfiguration.getConfig(APP_NAME,
-                buildGroup(BASE_URL.getServiceInterface(), null, null, null)));
-    }
-
-    @Test
-    public void testGet() {
-        serviceNameMapping.map(BASE_URL);
-        Set<String> serviceNames = serviceNameMapping.get(BASE_URL);
-        assertEquals(singleton(APP_NAME), serviceNames);
-
-        getApplicationConfig().setName("service1");
-        serviceNameMapping.map(BASE_URL);
-        serviceNames = serviceNameMapping.get(BASE_URL);
-        assertEquals(ofSet(APP_NAME, "service1"), serviceNames);
-
-        serviceNames = serviceNameMapping.get(BASE_URL
-                .setPath("com.acme.Interface1")
-                .removeParameter(VERSION_KEY)
-        );
-        assertEquals(singleton("Service1"), serviceNames);
-
-        serviceNames = serviceNameMapping.get(BASE_URL.addParameter(SUBSCRIBED_SERVICE_NAMES_KEY, "s1 , s2 , s3 "));
-        assertEquals(ofSet("s1", "s2", "s3"), serviceNames);
-    }
-}
-
diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/MetadataConstantsTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/MetadataConstantsTest.java
deleted file mode 100644
index d0c201b..0000000
--- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/MetadataConstantsTest.java
+++ /dev/null
@@ -1,35 +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.metadata;
-
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-/**
- * {@link MetadataConstants} Test-Cases
- *
- * @since 2.7.8
- */
-public class MetadataConstantsTest {
-
-    @Test
-    public void testConstants() {
-        assertEquals("exported-urls", MetadataConstants.EXPORTED_URLS_TAG);
-        assertEquals("subscribed-urls", MetadataConstants.SUBSCRIBED_URLS_TAG);
-    }
-}
diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/ParameterizedServiceNameMappingTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/ParameterizedServiceNameMappingTest.java
deleted file mode 100644
index dbe5454..0000000
--- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/ParameterizedServiceNameMappingTest.java
+++ /dev/null
@@ -1,67 +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.metadata;
-
-import org.apache.dubbo.common.URL;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import java.util.Arrays;
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-import static java.util.Collections.emptySet;
-import static java.util.Collections.singleton;
-import static org.apache.dubbo.common.constants.RegistryConstants.SUBSCRIBED_SERVICE_NAMES_KEY;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-/**
- * {@link ParameterizedServiceNameMapping} Test
- *
- * @see ParameterizedServiceNameMapping
- * @since 2.7.8
- */
-public class ParameterizedServiceNameMappingTest {
-
-    private static final URL BASE_URL = URL.valueOf("dubbo://127.0.0.1:20880");
-
-    private ParameterizedServiceNameMapping serviceNameMapping;
-
-    @BeforeEach
-    public void init() {
-        serviceNameMapping = new ParameterizedServiceNameMapping();
-    }
-
-    @Test
-    public void testMap() {
-        // NOTHING to happen
-        serviceNameMapping.map(BASE_URL);
-    }
-
-    @Test
-    public void testGet() {
-        Set<String> serviceNames = serviceNameMapping.get(BASE_URL);
-        assertEquals(emptySet(), serviceNames);
-
-        serviceNames = serviceNameMapping.get(BASE_URL.addParameter(SUBSCRIBED_SERVICE_NAMES_KEY, "    Service1     "));
-        assertEquals(singleton("Service1"), serviceNames);
-
-        serviceNames = serviceNameMapping.get(BASE_URL.addParameter(SUBSCRIBED_SERVICE_NAMES_KEY, "Service1 ,  Service2   "));
-        assertEquals(new LinkedHashSet(Arrays.asList("Service1", "Service2")), serviceNames);
-    }
-}
diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/PropertiesFileServiceNameMappingTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/PropertiesFileServiceNameMappingTest.java
deleted file mode 100644
index 68a6ebf..0000000
--- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/PropertiesFileServiceNameMappingTest.java
+++ /dev/null
@@ -1,60 +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.metadata;
-
-import org.apache.dubbo.common.URL;
-
-import org.junit.jupiter.api.Test;
-
-import java.util.Arrays;
-import java.util.LinkedHashSet;
-
-import static java.util.Collections.singleton;
-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.SERVICE_NAME_MAPPING_PROPERTIES_FILE_KEY;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-/**
- * {@link PropertiesFileServiceNameMapping} Test
- *
- * @since 2.7.8
- */
-public class PropertiesFileServiceNameMappingTest {
-
-    private static final URL BASE_URL = URL.valueOf("dubbo://127.0.0.1:20880");
-
-
-    @Test
-    public void testMap() {
-        PropertiesFileServiceNameMapping serviceNameMapping = new PropertiesFileServiceNameMapping();
-        serviceNameMapping.map(BASE_URL);
-    }
-
-    @Test
-    public void testGet() {
-
-        PropertiesFileServiceNameMapping serviceNameMapping = new PropertiesFileServiceNameMapping();
-        URL url = BASE_URL.setServiceInterface("com.acme.Interface1").addParameter(GROUP_KEY, "default");
-        assertEquals(singleton("Service1"), serviceNameMapping.get(url));
-
-        System.setProperty(SERVICE_NAME_MAPPING_PROPERTIES_FILE_KEY, "///META-INF//dubbo/service-name-mapping.properties");
-        serviceNameMapping = new PropertiesFileServiceNameMapping();
-
-        url = BASE_URL.setProtocol("thirft").setServiceInterface("com.acme.InterfaceX");
-        assertEquals(new LinkedHashSet<>(Arrays.asList("Service1", "Service2")), serviceNameMapping.get(url));
-    }
-}
diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/ServiceNameMappingTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/ServiceNameMappingTest.java
index 8c37998..e4b4c1e 100644
--- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/ServiceNameMappingTest.java
+++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/ServiceNameMappingTest.java
@@ -13,7 +13,8 @@
  * 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.metadata;
 
 import org.apache.dubbo.common.URL;
@@ -39,11 +40,13 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
+*/
 /**
  * {@link ServiceNameMapping} Test
  *
  * @since 2.7.8
- */
+ *//*
+
 public class ServiceNameMappingTest {
 
     private static final URL BASE_URL = URL.valueOf("dubbo://127.0.0.1:20880");
@@ -119,3 +122,4 @@ public class ServiceNameMappingTest {
 
     }
 }
+*/
diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactoryTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactoryTest.java
index 3aa5c02..5b0ffd7 100644
--- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactoryTest.java
+++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactoryTest.java
@@ -1,135 +1,135 @@
-/*
- * 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.metadata.report.support;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.common.utils.NetUtils;
-import org.apache.dubbo.metadata.definition.model.ServiceDefinition;
-import org.apache.dubbo.metadata.report.MetadataReport;
-import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;
-import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier;
-import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;
-
-import com.alibaba.fastjson.JSON;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * 2018/9/14
- */
-public class AbstractMetadataReportFactoryTest {
-
-    private AbstractMetadataReportFactory metadataReportFactory = new AbstractMetadataReportFactory() {
-        @Override
-        protected MetadataReport createMetadataReport(URL url) {
-            return new MetadataReport() {
-
-                @Override
-                public void storeProviderMetadata(MetadataIdentifier providerMetadataIdentifier, ServiceDefinition serviceDefinition) {
-                    store.put(providerMetadataIdentifier.getIdentifierKey(), JSON.toJSONString(serviceDefinition));
-                }
-
-                @Override
-                public void saveServiceMetadata(ServiceMetadataIdentifier metadataIdentifier, URL url) {
-
-                }
-
-                @Override
-                public void removeServiceMetadata(ServiceMetadataIdentifier metadataIdentifier) {
-
-                }
-
-                @Override
-                public List<String> getExportedURLs(ServiceMetadataIdentifier metadataIdentifier) {
-                    return null;
-                }
-
-                @Override
-                public void saveSubscribedData(SubscriberMetadataIdentifier subscriberMetadataIdentifier,
-                                               Collection<String> urls) {
-
-                }
-
-                @Override
-                public List<String> getSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier) {
-                    return null;
-                }
-
-                @Override
-                public String getServiceDefinition(MetadataIdentifier consumerMetadataIdentifier) {
-                    return null;
-                }
-
-                @Override
-                public void storeConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, Map serviceParameterMap) {
-                    store.put(consumerMetadataIdentifier.getIdentifierKey(), JSON.toJSONString(serviceParameterMap));
-                }
-
-                @Override
-                public void close() throws Exception {
-
-                }
-
-                Map<String, String> store = new ConcurrentHashMap<>();
-
-
-            };
-        }
-    };
-
-    @Test
-    public void testGetOneMetadataReport() {
-        URL url = URL.valueOf("zookeeper://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestService?version=1.0.0&application=vic");
-        MetadataReport metadataReport1 = metadataReportFactory.getMetadataReport(url);
-        MetadataReport metadataReport2 = metadataReportFactory.getMetadataReport(url);
-        Assertions.assertEquals(metadataReport1, metadataReport2);
-    }
-
-    @Test
-    public void testGetOneMetadataReportForIpFormat() {
-        String hostName = NetUtils.getLocalAddress().getHostName();
-        String ip = NetUtils.getIpByHost(hostName);
-        URL url1 = URL.valueOf("zookeeper://" + hostName + ":4444/org.apache.dubbo.TestService?version=1.0.0&application=vic");
-        URL url2 = URL.valueOf("zookeeper://" + ip + ":4444/org.apache.dubbo.TestService?version=1.0.0&application=vic");
-        MetadataReport metadataReport1 = metadataReportFactory.getMetadataReport(url1);
-        MetadataReport metadataReport2 = metadataReportFactory.getMetadataReport(url2);
-        Assertions.assertEquals(metadataReport1, metadataReport2);
-    }
-
-    @Test
-    public void testGetForDiffService() {
-        URL url1 = URL.valueOf("zookeeper://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestService1?version=1.0.0&application=vic");
-        URL url2 = URL.valueOf("zookeeper://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestService2?version=1.0.0&application=vic");
-        MetadataReport metadataReport1 = metadataReportFactory.getMetadataReport(url1);
-        MetadataReport metadataReport2 = metadataReportFactory.getMetadataReport(url2);
-        Assertions.assertEquals(metadataReport1, metadataReport2);
-    }
-
-    @Test
-    public void testGetForDiffGroup() {
-        URL url1 = URL.valueOf("zookeeper://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestService?version=1.0.0&application=vic&group=aaa");
-        URL url2 = URL.valueOf("zookeeper://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestService?version=1.0.0&application=vic&group=bbb");
-        MetadataReport metadataReport1 = metadataReportFactory.getMetadataReport(url1);
-        MetadataReport metadataReport2 = metadataReportFactory.getMetadataReport(url2);
-        Assertions.assertNotEquals(metadataReport1, metadataReport2);
-    }
-}
+///*
+// * 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.metadata.report.support;
+//
+//import org.apache.dubbo.common.URL;
+//import org.apache.dubbo.common.utils.NetUtils;
+//import org.apache.dubbo.metadata.definition.model.ServiceDefinition;
+//import org.apache.dubbo.metadata.report.MetadataReport;
+//import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;
+//import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier;
+//import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;
+//
+//import com.alibaba.fastjson.JSON;
+//import org.junit.jupiter.api.Assertions;
+//import org.junit.jupiter.api.Test;
+//
+//import java.util.Collection;
+//import java.util.List;
+//import java.util.Map;
+//import java.util.concurrent.ConcurrentHashMap;
+//
+///**
+// * 2018/9/14
+// */
+//public class AbstractMetadataReportFactoryTest {
+//
+//    private AbstractMetadataReportFactory metadataReportFactory = new AbstractMetadataReportFactory() {
+//        @Override
+//        protected MetadataReport createMetadataReport(URL url) {
+//            return new MetadataReport() {
+//
+//                @Override
+//                public void storeProviderMetadata(MetadataIdentifier providerMetadataIdentifier, ServiceDefinition serviceDefinition) {
+//                    store.put(providerMetadataIdentifier.getIdentifierKey(), JSON.toJSONString(serviceDefinition));
+//                }
+//
+//                @Override
+//                public void saveServiceMetadata(ServiceMetadataIdentifier metadataIdentifier, URL url) {
+//
+//                }
+//
+//                @Override
+//                public void removeServiceMetadata(ServiceMetadataIdentifier metadataIdentifier) {
+//
+//                }
+//
+//                @Override
+//                public List<String> getExportedURLs(ServiceMetadataIdentifier metadataIdentifier) {
+//                    return null;
+//                }
+//
+//                @Override
+//                public void saveSubscribedData(SubscriberMetadataIdentifier subscriberMetadataIdentifier,
+//                                               Collection<String> urls) {
+//
+//                }
+//
+//                @Override
+//                public List<String> getSubscribedURLs(SubscriberMetadataIdentifier subscriberMetadataIdentifier) {
+//                    return null;
+//                }
+//
+//                @Override
+//                public String getServiceDefinition(MetadataIdentifier consumerMetadataIdentifier) {
+//                    return null;
+//                }
+//
+//                @Override
+//                public void storeConsumerMetadata(MetadataIdentifier consumerMetadataIdentifier, Map serviceParameterMap) {
+//                    store.put(consumerMetadataIdentifier.getIdentifierKey(), JSON.toJSONString(serviceParameterMap));
+//                }
+//
+//                @Override
+//                public void close() throws Exception {
+//
+//                }
+//
+//                Map<String, String> store = new ConcurrentHashMap<>();
+//
+//
+//            };
+//        }
+//    };
+//
+//    @Test
+//    public void testGetOneMetadataReport() {
+//        URL url = URL.valueOf("zookeeper://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestService?version=1.0.0&application=vic");
+//        MetadataReport metadataReport1 = metadataReportFactory.getMetadataReport(url);
+//        MetadataReport metadataReport2 = metadataReportFactory.getMetadataReport(url);
+//        Assertions.assertEquals(metadataReport1, metadataReport2);
+//    }
+//
+//    @Test
+//    public void testGetOneMetadataReportForIpFormat() {
+//        String hostName = NetUtils.getLocalAddress().getHostName();
+//        String ip = NetUtils.getIpByHost(hostName);
+//        URL url1 = URL.valueOf("zookeeper://" + hostName + ":4444/org.apache.dubbo.TestService?version=1.0.0&application=vic");
+//        URL url2 = URL.valueOf("zookeeper://" + ip + ":4444/org.apache.dubbo.TestService?version=1.0.0&application=vic");
+//        MetadataReport metadataReport1 = metadataReportFactory.getMetadataReport(url1);
+//        MetadataReport metadataReport2 = metadataReportFactory.getMetadataReport(url2);
+//        Assertions.assertEquals(metadataReport1, metadataReport2);
+//    }
+//
+//    @Test
+//    public void testGetForDiffService() {
+//        URL url1 = URL.valueOf("zookeeper://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestService1?version=1.0.0&application=vic");
+//        URL url2 = URL.valueOf("zookeeper://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestService2?version=1.0.0&application=vic");
+//        MetadataReport metadataReport1 = metadataReportFactory.getMetadataReport(url1);
+//        MetadataReport metadataReport2 = metadataReportFactory.getMetadataReport(url2);
+//        Assertions.assertEquals(metadataReport1, metadataReport2);
+//    }
+//
+//    @Test
+//    public void testGetForDiffGroup() {
+//        URL url1 = URL.valueOf("zookeeper://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestService?version=1.0.0&application=vic&group=aaa");
+//        URL url2 = URL.valueOf("zookeeper://" + NetUtils.getLocalAddress().getHostName() + ":4444/org.apache.dubbo.TestService?version=1.0.0&application=vic&group=bbb");
+//        MetadataReport metadataReport1 = metadataReportFactory.getMetadataReport(url1);
+//        MetadataReport metadataReport2 = metadataReportFactory.getMetadataReport(url2);
+//        Assertions.assertNotEquals(metadataReport1, metadataReport2);
+//    }
+//}
diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReportTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReportTest.java
index c5325a1..37b0d3c 100644
--- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReportTest.java
+++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReportTest.java
@@ -13,7 +13,8 @@
  * 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.metadata.report.support;
 
 import org.apache.dubbo.common.URL;
@@ -49,9 +50,19 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+*/
 /**
+ * Test {@link MetadataReport#saveExportedURLs(String, String, String)} method
  *
- */
+ * @since 2.7.8
+ * <p>
+ * Test {@link MetadataReport#getExportedURLs(String, String)} method
+ * @since 2.7.8
+ * <p>
+ * Test {@link MetadataReport#getExportedURLsContent(String, String)} method
+ * @since 2.7.8
+ *//*
+
 public class AbstractMetadataReportTest {
 
     private NewMetadataReport abstractMetadataReport;
@@ -266,11 +277,19 @@ public class AbstractMetadataReportTest {
         }
     }
 
-    /**
-     * Test {@link MetadataReport#saveExportedURLs(String, String, String)} method
-     *
-     * @since 2.7.8
-     */
+    */
+/**
+ * Test {@link MetadataReport#saveExportedURLs(String, String, String)} method
+ *
+ * @since 2.7.8
+ * <p>
+ * Test {@link MetadataReport#getExportedURLs(String, String)} method
+ * @since 2.7.8
+ * <p>
+ * Test {@link MetadataReport#getExportedURLsContent(String, String)} method
+ * @since 2.7.8
+ *//*
+
     @Test
     public void testSaveExportedURLs() {
         String serviceName = null;
@@ -284,11 +303,13 @@ public class AbstractMetadataReportTest {
         assertTrue(abstractMetadataReport.saveExportedURLs(serviceName, exportedServiceRevision, exportedURLsContent));
     }
 
-    /**
-     * Test {@link MetadataReport#getExportedURLs(String, String)} method
-     *
-     * @since 2.7.8
-     */
+    */
+/**
+ * Test {@link MetadataReport#getExportedURLs(String, String)} method
+ *
+ * @since 2.7.8
+ *//*
+
     @Test
     public void testGetExportedURLs() {
         String serviceName = null;
@@ -296,11 +317,13 @@ public class AbstractMetadataReportTest {
         assertEquals(emptySet(), abstractMetadataReport.getExportedURLs(serviceName, exportedServiceRevision));
     }
 
-    /**
-     * Test {@link MetadataReport#getExportedURLsContent(String, String)} method
-     *
-     * @since 2.7.8
-     */
+    */
+/**
+ * Test {@link MetadataReport#getExportedURLsContent(String, String)} method
+ *
+ * @since 2.7.8
+ *//*
+
     @Test
     public void testGetExportedURLsContent() {
         String serviceName = null;
@@ -446,3 +469,4 @@ public class AbstractMetadataReportTest {
 
 
 }
+*/
diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/support/ConfigCenterBasedMetadataReportTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/support/ConfigCenterBasedMetadataReportTest.java
deleted file mode 100644
index 32205b9..0000000
--- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/support/ConfigCenterBasedMetadataReportTest.java
+++ /dev/null
@@ -1,155 +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.metadata.report.support;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.metadata.URLRevisionResolver;
-import org.apache.dubbo.metadata.definition.ServiceDefinitionBuilder;
-import org.apache.dubbo.metadata.definition.model.ServiceDefinition;
-import org.apache.dubbo.metadata.report.MetadataReport;
-import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;
-import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier;
-import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;
-import org.apache.dubbo.metadata.report.support.file.FileSystemMetadataReportFactory;
-import org.apache.dubbo.rpc.model.ApplicationModel;
-import org.apache.dubbo.rpc.service.EchoService;
-
-import com.google.gson.Gson;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import static java.util.Collections.singleton;
-import static java.util.stream.Collectors.toSet;
-import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.SIDE_KEY;
-import static org.apache.dubbo.metadata.report.support.Constants.SYNC_REPORT_KEY;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNull;
-
-/**
- * {@link ConfigCenterBasedMetadataReport} Test-Cases
- *
- * @since 2.7.8
- */
-public class ConfigCenterBasedMetadataReportTest {
-
-    private static final URL REPORT_SERVER_URL = URL.valueOf("file://")
-            .addParameter(APPLICATION_KEY, "test")
-            .addParameter(SYNC_REPORT_KEY, "true");
-
-    private static final Class<EchoService> INTERFACE_CLASS = EchoService.class;
-
-    private static final String INTERFACE_NAME = INTERFACE_CLASS.getName();
-
-    private static final String APP_NAME = "test-service";
-
-    private static final URL BASE_URL = URL
-            .valueOf("dubbo://127.0.0.1:20880")
-            .setPath(INTERFACE_NAME)
-            .addParameter(APPLICATION_KEY, APP_NAME)
-            .addParameter(SIDE_KEY, "provider");
-
-    private ConfigCenterBasedMetadataReport metadataReport;
-
-    @BeforeEach
-    public void init() {
-        ApplicationModel.getConfigManager().setApplication(new ApplicationConfig("test-service"));
-        this.metadataReport = new FileSystemMetadataReportFactory().getMetadataReport(REPORT_SERVER_URL);
-    }
-
-    @AfterEach
-    public void reset() throws Exception {
-        ApplicationModel.reset();
-        this.metadataReport.close();
-    }
-
-    /**
-     * Test {@link MetadataReport#storeProviderMetadata(MetadataIdentifier, ServiceDefinition)} and
-     * {@link MetadataReport#getServiceDefinition(MetadataIdentifier)}
-     */
-    @Test
-    public void testStoreProviderMetadataAndGetServiceDefinition() {
-        MetadataIdentifier metadataIdentifier = new MetadataIdentifier(BASE_URL);
-        ServiceDefinition serviceDefinition = ServiceDefinitionBuilder.buildFullDefinition(INTERFACE_CLASS, BASE_URL.getParameters());
-        metadataReport.storeProviderMetadata(metadataIdentifier, serviceDefinition);
-        String serviceDefinitionJSON = metadataReport.getServiceDefinition(metadataIdentifier);
-        assertEquals(serviceDefinitionJSON, new Gson().toJson(serviceDefinition));
-    }
-
-    /**
-     * Test {@link MetadataReport#storeConsumerMetadata(MetadataIdentifier, Map)} and
-     * {@link MetadataReport#getServiceDefinition(MetadataIdentifier)}
-     */
-    @Test
-    public void testStoreConsumerMetadata() {
-        MetadataIdentifier metadataIdentifier = new MetadataIdentifier(BASE_URL);
-        metadataReport.storeConsumerMetadata(metadataIdentifier, BASE_URL.getParameters());
-        String parametersJSON = metadataReport.getServiceDefinition(metadataIdentifier);
-        assertEquals(parametersJSON, new Gson().toJson(BASE_URL.getParameters()));
-    }
-
-    /**
-     * Test {@link MetadataReport#saveServiceMetadata(ServiceMetadataIdentifier, URL)} and
-     * {@link MetadataReport#removeServiceMetadata(ServiceMetadataIdentifier)}
-     */
-    @Test
-    public void testSaveServiceMetadataAndRemoveServiceMetadata() {
-        ServiceMetadataIdentifier metadataIdentifier = new ServiceMetadataIdentifier(BASE_URL);
-        metadataReport.saveServiceMetadata(metadataIdentifier, BASE_URL);
-        String metadata = metadataReport.getMetadata(metadataIdentifier);
-        assertEquals(URL.encode(BASE_URL.toFullString()), metadata);
-        metadataReport.removeServiceMetadata(metadataIdentifier);
-        assertNull(metadataReport.getMetadata(metadataIdentifier));
-    }
-
-    /**
-     * Test {@link MetadataReport#saveSubscribedData(SubscriberMetadataIdentifier, Collection)} and
-     * {@link MetadataReport#getSubscribedURLs(SubscriberMetadataIdentifier)}
-     */
-    @Test
-    public void testSaveSubscribedDataAndGetSubscribedURLs() {
-        SubscriberMetadataIdentifier metadataIdentifier = new SubscriberMetadataIdentifier(BASE_URL);
-        Set<String> urls = singleton(BASE_URL).stream().map(URL::toIdentityString).collect(toSet());
-        metadataReport.saveSubscribedData(metadataIdentifier, urls);
-        Collection<String> subscribedURLs = metadataReport.getSubscribedURLs(metadataIdentifier);
-        assertEquals(1, subscribedURLs.size());
-        assertEquals(urls, subscribedURLs);
-    }
-
-    /**
-     * Test {@link MetadataReport#saveExportedURLs(SortedSet)},
-     * {@link MetadataReport#getExportedURLsContent(String, String)} and
-     * {@link MetadataReport#getExportedURLs(String, String)}
-     */
-    @Test
-    public void testSaveExportedURLsAndGetExportedURLs() {
-        SortedSet<String> urls = singleton(BASE_URL).stream().map(URL::toIdentityString).collect(TreeSet::new, Set::add, Set::addAll);
-        metadataReport.saveExportedURLs(urls);
-
-        URLRevisionResolver urlRevisionResolver = URLRevisionResolver.INSTANCE;
-        String revision = urlRevisionResolver.resolve(urls);
-        assertEquals(urls, metadataReport.getExportedURLs(APP_NAME, revision));
-    }
-}
diff --git a/dubbo-metadata/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReport.java b/dubbo-metadata/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReport.java
index 3a74f8d..9ca2e42 100644
--- a/dubbo-metadata/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReport.java
+++ b/dubbo-metadata/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReport.java
@@ -19,7 +19,6 @@ package org.apache.dubbo.metadata.store.zookeeper;
 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.PathUtils;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.metadata.report.identifier.BaseMetadataIdentifier;
 import org.apache.dubbo.metadata.report.identifier.KeyTypeEnum;
@@ -27,7 +26,6 @@ import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;
 import org.apache.dubbo.metadata.report.identifier.ServiceMetadataIdentifier;
 import org.apache.dubbo.metadata.report.identifier.SubscriberMetadataIdentifier;
 import org.apache.dubbo.metadata.report.support.AbstractMetadataReport;
-import org.apache.dubbo.metadata.report.support.ConfigCenterBasedMetadataReport;
 import org.apache.dubbo.remoting.zookeeper.ZookeeperClient;
 import org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter;
 
@@ -38,15 +36,10 @@ import java.util.List;
 
 import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR;
-import static org.apache.dubbo.metadata.MetadataConstants.DEFAULT_PATH_TAG;
-import static org.apache.dubbo.metadata.MetadataConstants.EXPORTED_URLS_TAG;
 
 /**
  * ZookeeperMetadataReport
- *
- * @deprecated 2.7.8 This class will be removed in the future, {@link ConfigCenterBasedMetadataReport} as a substitute.
  */
-@Deprecated
 public class ZookeeperMetadataReport extends AbstractMetadataReport {
 
     private final static Logger logger = LoggerFactory.getLogger(ZookeeperMetadataReport.class);
@@ -127,26 +120,4 @@ public class ZookeeperMetadataReport extends AbstractMetadataReport {
         return toRootDir() + metadataIdentifier.getUniqueKey(KeyTypeEnum.PATH);
     }
 
-    @Override
-    public boolean saveExportedURLs(String serviceName, String exportedServicesRevision, String exportedURLsContent) {
-        String path = buildExportedURLsMetadataPath(serviceName, exportedServicesRevision);
-        zkClient.create(path, exportedURLsContent, false);
-        return true;
-    }
-
-    @Override
-    public String getExportedURLsContent(String serviceName, String exportedServicesRevision) {
-        String path = buildExportedURLsMetadataPath(serviceName, exportedServicesRevision);
-        String content = zkClient.getContent(path);
-        return content;
-    }
-
-    private String buildExportedURLsMetadataPath(String serviceName, String exportedServicesRevision) {
-        return buildPath(DEFAULT_PATH_TAG, EXPORTED_URLS_TAG, serviceName, exportedServicesRevision);
-    }
-
-    private String buildPath(String... paths) {
-        return PathUtils.buildPath(toRootDir(), paths);
-    }
-
 }
diff --git a/dubbo-metadata/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportFactory.java b/dubbo-metadata/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportFactory.java
index 4773e1e..0ffed8d 100644
--- a/dubbo-metadata/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportFactory.java
+++ b/dubbo-metadata/dubbo-metadata-report-zookeeper/src/main/java/org/apache/dubbo/metadata/store/zookeeper/ZookeeperMetadataReportFactory.java
@@ -16,17 +16,25 @@
  */
 package org.apache.dubbo.metadata.store.zookeeper;
 
-import org.apache.dubbo.metadata.report.identifier.KeyTypeEnum;
-import org.apache.dubbo.metadata.report.support.ConfigCenterBasedMetadataReportFactory;
+import org.apache.dubbo.common.URL;
+import org.apache.dubbo.metadata.report.MetadataReport;
+import org.apache.dubbo.metadata.report.support.AbstractMetadataReportFactory;
+import org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter;
 
 /**
  * ZookeeperRegistryFactory.
- *
- * @revised 2.7.8 {@link ConfigCenterBasedMetadataReportFactory}
  */
-public class ZookeeperMetadataReportFactory extends ConfigCenterBasedMetadataReportFactory {
+public class ZookeeperMetadataReportFactory extends AbstractMetadataReportFactory {
+
+    private ZookeeperTransporter zookeeperTransporter;
 
-    public ZookeeperMetadataReportFactory() {
-        super(KeyTypeEnum.PATH);
+    public void setZookeeperTransporter(ZookeeperTransporter zookeeperTransporter) {
+        this.zookeeperTransporter = zookeeperTransporter;
     }
+
+    @Override
+    public MetadataReport createMetadataReport(URL url) {
+        return new ZookeeperMetadataReport(url, zookeeperTransporter);
+    }
+
 }
diff --git a/dubbo-metadata/pom.xml b/dubbo-metadata/pom.xml
index 17ceada..a112779 100644
--- a/dubbo-metadata/pom.xml
+++ b/dubbo-metadata/pom.xml
@@ -29,13 +29,13 @@
     <packaging>pom</packaging>
     <modules>
         <module>dubbo-metadata-api</module>
-        <module>dubbo-metadata-definition-protobuf</module>
+        <!--        <module>dubbo-metadata-definition-protobuf</module>-->
         <module>dubbo-metadata-report-zookeeper</module>
-        <module>dubbo-metadata-report-redis</module>
-        <module>dubbo-metadata-report-consul</module>
-        <module>dubbo-metadata-report-etcd</module>
-        <module>dubbo-metadata-report-nacos</module>
-        <module>dubbo-metadata-processor</module>
+        <!--        <module>dubbo-metadata-report-redis</module>-->
+        <!--        <module>dubbo-metadata-report-consul</module>-->
+        <!--        <module>dubbo-metadata-report-etcd</module>-->
+        <!--        <module>dubbo-metadata-report-nacos</module>-->
+        <!--        <module>dubbo-metadata-processor</module>-->
     </modules>
 
 </project>
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistry.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistry.java
index 7d4d48e..8e5a800 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistry.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistry.java
@@ -53,7 +53,7 @@ import static java.util.Collections.unmodifiableSet;
 import static java.util.stream.Collectors.toSet;
 import static java.util.stream.Stream.of;
 import static org.apache.dubbo.common.constants.CommonConstants.DUBBO;
-import static org.apache.dubbo.common.constants.CommonConstants.GROUP_CHAR_SEPERATOR;
+import static org.apache.dubbo.common.constants.CommonConstants.GROUP_CHAR_SEPARATOR;
 import static org.apache.dubbo.common.constants.CommonConstants.GROUP_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.INTERFACE_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.MAPPING_KEY;
@@ -318,7 +318,7 @@ public class ServiceDiscoveryRegistry implements Registry {
             List<ServiceInstance> serviceInstances = serviceDiscovery.getInstances(serviceName);
             serviceListener.onEvent(new ServiceInstancesChangedEvent(serviceName, serviceInstances));
         });
-        listener.notify(serviceListener.getUrls(url.getServiceKey() + GROUP_CHAR_SEPERATOR + url.getParameter(PROTOCOL_KEY, DUBBO)));
+        listener.notify(serviceListener.getUrls(url.getServiceKey() + GROUP_CHAR_SEPARATOR + url.getParameter(PROTOCOL_KEY, DUBBO)));
 
         serviceListener.addListener(url.getProtocolServiceKey(), listener);
         registerServiceInstancesChangedListener(url, serviceListener);
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/proxy/CompositeMetadataServiceProxyFactory.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/proxy/CompositeMetadataServiceProxyFactory.java
deleted file mode 100644
index f8c95d6..0000000
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/proxy/CompositeMetadataServiceProxyFactory.java
+++ /dev/null
@@ -1,133 +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.registry.client.metadata.proxy;
-
-import org.apache.dubbo.common.logger.Logger;
-import org.apache.dubbo.common.logger.LoggerFactory;
-import org.apache.dubbo.metadata.MetadataService;
-import org.apache.dubbo.registry.client.ServiceInstance;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-import static java.lang.String.format;
-import static java.lang.reflect.Proxy.newProxyInstance;
-import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;
-
-/**
- * The composite implementation of {@link MetadataServiceProxyFactory}
- *
- * @since 2.7.8
- */
-public class CompositeMetadataServiceProxyFactory extends BaseMetadataServiceProxyFactory {
-
-    private static final Logger logger = LoggerFactory.getLogger(CompositeMetadataServiceProxyFactory.class);
-
-    @Override
-    public MetadataService createProxy(ServiceInstance serviceInstance) {
-        MetadataService metadataService = (MetadataService) newProxyInstance(
-                getClass().getClassLoader(),
-                new Class[]{MetadataService.class},
-                new MetadataServiceInvocationHandler(serviceInstance, this)
-        );
-        return metadataService;
-    }
-
-    static class MetadataServiceInvocationHandler implements InvocationHandler {
-
-        private final ServiceInstance serviceInstance;
-
-        private final MetadataServiceProxyFactory excluded;
-
-        private volatile List<MetadataService> metadataServices;
-
-        MetadataServiceInvocationHandler(ServiceInstance serviceInstance,
-                                         MetadataServiceProxyFactory excluded) {
-            this.serviceInstance = serviceInstance;
-            this.excluded = excluded;
-        }
-
-        private List<MetadataService> loadMetadataServices() {
-            return getExtensionLoader(MetadataServiceProxyFactory.class)
-                    .getSupportedExtensionInstances()
-                    .stream()
-                    .filter(this::isRequiredFactory)
-                    .map(this::getProxy)
-                    .filter(Objects::nonNull)
-                    .collect(Collectors.toList());
-        }
-
-        private List<MetadataService> getMetadataServices() {
-            if (metadataServices == null) {
-                metadataServices = loadMetadataServices();
-                if (metadataServices.isEmpty()) {
-                    throw new IllegalStateException(format("No valid proxy of %s can't be loaded.",
-                            MetadataService.class.getName()));
-                }
-            }
-            return metadataServices;
-        }
-
-        private boolean isRequiredFactory(MetadataServiceProxyFactory factory) {
-            return !factory.equals(excluded);
-        }
-
-        private MetadataService getProxy(MetadataServiceProxyFactory factory) {
-            MetadataService metadataService = null;
-            try {
-                metadataService = factory.getProxy(serviceInstance);
-            } catch (Exception e) {
-                if (logger.isErrorEnabled()) {
-                    logger.error(format("The proxy of %s can't be gotten by %s [from : %s].",
-                            MetadataService.class.getName(),
-                            factory.getClass().getName(),
-                            serviceInstance.toString()));
-                }
-            }
-            return metadataService;
-        }
-
-        @Override
-        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-
-            if (Object.class.equals(method.getDeclaringClass())) {
-                return method.invoke(proxy, args);
-            }
-
-            Object result = null;
-
-            for (MetadataService metadataService : getMetadataServices()) {
-                try {
-                    result = method.invoke(metadataService, args);
-                    if (result != null) {
-                        break;
-                    }
-                } catch (Exception e) {
-                    if (logger.isErrorEnabled()) {
-                        logger.error(format("MetadataService[type : %s] executes failed.", metadataService.getClass().getName()), e);
-                    }
-                }
-            }
-
-            return result;
-        }
-    }
-
-}
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/proxy/BaseMetadataServiceProxyFactoryTest.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/proxy/BaseMetadataServiceProxyFactoryTest.java
deleted file mode 100644
index 6aca4c6..0000000
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/proxy/BaseMetadataServiceProxyFactoryTest.java
+++ /dev/null
@@ -1,78 +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.registry.client.metadata.proxy;
-
-import org.apache.dubbo.metadata.MetadataService;
-import org.apache.dubbo.registry.client.DefaultServiceInstance;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import static java.lang.String.valueOf;
-import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.EXPORTED_SERVICES_REVISION_PROPERTY_NAME;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotSame;
-import static org.junit.jupiter.api.Assertions.assertSame;
-
-/**
- * {@link BaseMetadataServiceProxyFactory} Test-Cases
- *
- * @since 2.7.8
- */
-public class BaseMetadataServiceProxyFactoryTest {
-
-    private MyMetadataServiceProxyFactory factory;
-
-    private DefaultServiceInstance instance;
-
-    @BeforeEach
-    public void init() {
-        factory = new MyMetadataServiceProxyFactory();
-        instance = createServiceInstance();
-    }
-
-    private DefaultServiceInstance createServiceInstance() {
-        DefaultServiceInstance serviceInstance = new DefaultServiceInstance(valueOf(System.nanoTime()), "A", "127.0.0.1", 8080);
-        Map<String, String> metadata = new HashMap<>();
-        metadata.put(EXPORTED_SERVICES_REVISION_PROPERTY_NAME, "X");
-        serviceInstance.setMetadata(metadata);
-        return serviceInstance;
-    }
-
-    @Test
-    public void testCreateProxyCacheKey() {
-        assertEquals("A#X", factory.createProxyCacheKey(instance));
-    }
-
-    @Test
-    public void testCreateProxy() {
-        MetadataService metadataService = factory.createProxy(instance);
-        MetadataService metadataService2 = factory.createProxy(instance);
-        assertNotSame(metadataService, metadataService2);
-    }
-
-    @Test
-    public void testGetProxy() {
-        MetadataService metadataService = factory.getProxy(instance);
-        MetadataService metadataService2 = factory.getProxy(instance);
-        assertSame(metadataService, metadataService2);
-    }
-
-}
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/proxy/CompositeMetadataServiceProxyFactoryTest.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/proxy/CompositeMetadataServiceProxyFactoryTest.java
deleted file mode 100644
index ddd78e0..0000000
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/proxy/CompositeMetadataServiceProxyFactoryTest.java
+++ /dev/null
@@ -1,96 +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.registry.client.metadata.proxy;
-
-import org.apache.dubbo.common.URL;
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.metadata.MetadataService;
-import org.apache.dubbo.metadata.report.MetadataReportInstance;
-import org.apache.dubbo.registry.client.DefaultServiceInstance;
-import org.apache.dubbo.rpc.model.ApplicationModel;
-
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.SortedSet;
-
-import static java.lang.String.valueOf;
-import static org.apache.dubbo.common.constants.CommonConstants.APPLICATION_KEY;
-import static org.apache.dubbo.common.constants.CommonConstants.COMPOSITE_METADATA_STORAGE_TYPE;
-import static org.apache.dubbo.metadata.report.support.Constants.SYNC_REPORT_KEY;
-import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.EXPORTED_SERVICES_REVISION_PROPERTY_NAME;
-import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.METADATA_SERVICE_URL_PARAMS_PROPERTY_NAME;
-import static org.junit.jupiter.api.Assertions.assertSame;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-/**
- * {@link CompositeMetadataServiceProxyFactory} Test-Cases
- *
- * @since 2.7.8
- */
-public class CompositeMetadataServiceProxyFactoryTest {
-
-    private static final URL METADATA_REPORT_URL = URL.valueOf("file://")
-            .addParameter(APPLICATION_KEY, "test")
-            .addParameter(SYNC_REPORT_KEY, "true");
-
-    private static final String APP_NAME = "test-service";
-
-    private MetadataServiceProxyFactory factory;
-
-    private DefaultServiceInstance instance;
-
-    @BeforeEach
-    public void init() {
-        ApplicationModel.getConfigManager().setApplication(new ApplicationConfig(APP_NAME));
-        MetadataReportInstance.init(METADATA_REPORT_URL);
-        factory = MetadataServiceProxyFactory.getExtension(COMPOSITE_METADATA_STORAGE_TYPE);
-        instance = createServiceInstance();
-    }
-
-    @AfterEach
-    public void reset() throws Exception {
-        ApplicationModel.reset();
-        MetadataReportInstance.getMetadataReport().close();
-    }
-
-    private DefaultServiceInstance createServiceInstance() {
-        DefaultServiceInstance serviceInstance = new DefaultServiceInstance(valueOf(System.nanoTime()), "A", "127.0.0.1", 8080);
-        Map<String, String> metadata = new HashMap<>();
-        metadata.put(EXPORTED_SERVICES_REVISION_PROPERTY_NAME, "X");
-        metadata.put(METADATA_SERVICE_URL_PARAMS_PROPERTY_NAME, "{\"dubbo\":{\"application\":\"dubbo-provider-demo\",\"deprecated\":\"false\",\"group\":\"dubbo-provider-demo\",\"version\":\"1.0.0\",\"timestamp\":\"1564845042651\",\"dubbo\":\"2.0.2\",\"host\":\"192.168.0.102\",\"port\":\"20880\"}}");
-        serviceInstance.setMetadata(metadata);
-        return serviceInstance;
-    }
-
-    @Test
-    public void testGetProxy() {
-        MetadataService metadataService = factory.getProxy(instance);
-        MetadataService metadataService2 = factory.getProxy(instance);
-        assertSame(metadataService, metadataService2);
-    }
-
-    @Test
-    public void testGetExportedURLs() {
-        MetadataService metadataService = factory.getProxy(instance);
-        SortedSet<String> exportedURLs = metadataService.getExportedURLs();
-        assertTrue(exportedURLs.isEmpty());
-    }
-}
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/proxy/MetadataServiceProxyFactoryTest.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/proxy/MetadataServiceProxyFactoryTest.java
deleted file mode 100644
index 2c31c22..0000000
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/proxy/MetadataServiceProxyFactoryTest.java
+++ /dev/null
@@ -1,49 +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.registry.client.metadata.proxy;
-
-import org.junit.jupiter.api.Test;
-
-import static org.apache.dubbo.common.constants.CommonConstants.COMPOSITE_METADATA_STORAGE_TYPE;
-import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;
-import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;
-import static org.apache.dubbo.registry.client.metadata.proxy.MetadataServiceProxyFactory.getDefaultExtension;
-import static org.apache.dubbo.registry.client.metadata.proxy.MetadataServiceProxyFactory.getExtension;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-/**
- * {@link MetadataServiceProxyFactory} Test-Cases
- *
- * @since 2.7.8
- */
-public class MetadataServiceProxyFactoryTest {
-
-    @Test
-    public void testExtension() {
-        MetadataServiceProxyFactory defaultFactory = getDefaultExtension();
-        MetadataServiceProxyFactory factory = getExtension(DEFAULT_METADATA_STORAGE_TYPE);
-        assertEquals(defaultFactory, factory);
-
-        assertEquals(MyMetadataServiceProxyFactory.class, factory.getClass());
-
-        factory = getExtension(REMOTE_METADATA_STORAGE_TYPE);
-        assertEquals(RemoteMetadataServiceProxyFactory.class, factory.getClass());
-
-        factory = getExtension(COMPOSITE_METADATA_STORAGE_TYPE);
-        assertEquals(CompositeMetadataServiceProxyFactory.class, factory.getClass());
-    }
-}
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/proxy/MyMetadataServiceProxyFactory.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/proxy/MyMetadataServiceProxyFactory.java
deleted file mode 100644
index 86247e1..0000000
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/proxy/MyMetadataServiceProxyFactory.java
+++ /dev/null
@@ -1,29 +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.registry.client.metadata.proxy;
-
-import org.apache.dubbo.metadata.MetadataService;
-import org.apache.dubbo.metadata.store.InMemoryWritableMetadataService;
-import org.apache.dubbo.registry.client.ServiceInstance;
-
-public class MyMetadataServiceProxyFactory extends BaseMetadataServiceProxyFactory {
-
-    @Override
-    protected MetadataService createProxy(ServiceInstance serviceInstance) {
-        return new InMemoryWritableMetadataService();
-    }
-}