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/27 07:36:45 UTC

[dubbo] 01/03: unify registry-cluster key

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

commit 0cd52b940c28e7fa94376f4a1e8f83e5da5b8627
Author: ken.lj <ke...@gmail.com>
AuthorDate: Mon Jul 27 15:20:51 2020 +0800

    unify registry-cluster key
---
 .../dubbo/common/constants/RegistryConstants.java  |  4 +++-
 .../org/apache/dubbo/metadata/MetadataInfo.java    | 28 +++++++++++++++++-----
 .../apache/dubbo/metadata/MetadataInfoTest.java    |  2 +-
 .../client/DefaultRegistryClusterIdentifier.java   |  6 ++---
 .../registry/client/DefaultServiceInstance.java    |  1 +
 .../dubbo/registry/client/InstanceAddressURL.java  | 12 +++++++++-
 .../registry/client/RegistryClusterIdentifier.java |  7 +++---
 .../registry/client/ServiceDiscoveryRegistry.java  | 25 +++++++++----------
 .../listener/ServiceInstancesChangedListener.java  |  5 ++--
 ...MetadataServiceURLParamsMetadataCustomizer.java |  2 +-
 .../metadata/ServiceInstanceMetadataUtils.java     |  4 ++--
 .../store/InMemoryWritableMetadataService.java     | 20 ++++++++--------
 .../metadata/store/RemoteMetadataServiceImpl.java  | 15 ++++++------
 13 files changed, 81 insertions(+), 50 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/RegistryConstants.java b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/RegistryConstants.java
index 420a909..d25e9fc 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/RegistryConstants.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/RegistryConstants.java
@@ -21,7 +21,9 @@ public interface RegistryConstants {
 
     String REGISTRY_KEY = "registry";
 
-    String REGISTRY_CLUSTER = "REGISTRY_CLUSTER";
+    String REGISTRY_CLUSTER_KEY = "REGISTRY_CLUSTER";
+
+    String REGISTRY_CLUSTER_TYPE_KEY = "registry-cluster-type";
 
     String REGISTRY_PROTOCOL = "registry";
 
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 315e56e..47e8705 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
@@ -47,6 +47,7 @@ public class MetadataInfo implements Serializable {
     private String revision;
     private Map<String, ServiceInfo> services;
 
+    // used at runtime
     private transient Map<String, String> extendParams;
     private transient AtomicBoolean reported = new AtomicBoolean(false);
 
@@ -85,7 +86,7 @@ public class MetadataInfo implements Serializable {
         markChanged();
     }
 
-    public String getRevision() {
+    public String calAndGetRevision() {
         if (revision != null && hasReported()) {
             return revision;
         }
@@ -161,8 +162,11 @@ public class MetadataInfo implements Serializable {
 
     @Override
     public String toString() {
-        // FIXME
-        return super.toString();
+        return "metadata{" +
+                "app='" + app + "'," +
+                "revision='" + revision + "'," +
+                "services=" + services +
+                "}";
     }
 
     public static class ServiceInfo implements Serializable {
@@ -174,12 +178,17 @@ public class MetadataInfo implements Serializable {
         private String path; // most of the time, path is the same with the interface name.
         private Map<String, String> params;
 
+        // params configuried on consumer side,
         private transient Map<String, String> consumerParams;
+        // cached method params
         private transient Map<String, Map<String, String>> methodParams;
         private transient Map<String, Map<String, String>> consumerMethodParams;
-        private volatile transient Map<String, Number> numbers;
-        private volatile transient Map<String, Map<String, Number>> methodNumbers;
+        // cached numbers
+        private transient Map<String, Number> numbers;
+        private transient Map<String, Map<String, Number>> methodNumbers;
+        // service + group + version
         private transient String serviceKey;
+        // service + group + version + protocol
         private transient String matchKey;
 
         public ServiceInfo() {
@@ -420,7 +429,14 @@ public class MetadataInfo implements Serializable {
 
         @Override
         public String toString() {
-            return super.toString();
+            return "service{" +
+                    "name='" + name + "'," +
+                    "group='" + group + "'," +
+                    "version='" + version + "'," +
+                    "protocol='" + protocol + "'," +
+                    "params=" + params + "," +
+                    "consumerParams=" + consumerParams +
+                    "}";
         }
     }
 }
diff --git a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/MetadataInfoTest.java b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/MetadataInfoTest.java
index be8c3fe..fdb7021 100644
--- a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/MetadataInfoTest.java
+++ b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/MetadataInfoTest.java
@@ -31,6 +31,6 @@ public class MetadataInfoTest {
         metadataInfo.addService(serviceInfo);
 
         System.out.println(serviceInfo.toDescString());
-        System.out.println(metadataInfo.getRevision());
+        System.out.println(metadataInfo.calAndGetRevision());
     }
 }
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/DefaultRegistryClusterIdentifier.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/DefaultRegistryClusterIdentifier.java
index 6c88265..42cc10b 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/DefaultRegistryClusterIdentifier.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/DefaultRegistryClusterIdentifier.java
@@ -18,16 +18,16 @@ package org.apache.dubbo.registry.client;
 
 import org.apache.dubbo.common.URL;
 
-import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_CLUSTER;
+import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_CLUSTER_KEY;
 
 public class DefaultRegistryClusterIdentifier implements RegistryClusterIdentifier {
     @Override
     public String providerKey(URL url) {
-        return url.getParameter(REGISTRY_CLUSTER);
+        return url.getParameter(REGISTRY_CLUSTER_KEY);
     }
 
     @Override
     public String consumerKey(URL url) {
-        return url.getParameter(REGISTRY_CLUSTER);
+        return url.getParameter(REGISTRY_CLUSTER_KEY);
     }
 }
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/DefaultServiceInstance.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/DefaultServiceInstance.java
index 3c7204d..eb581f9 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/DefaultServiceInstance.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/DefaultServiceInstance.java
@@ -49,6 +49,7 @@ public class DefaultServiceInstance implements ServiceInstance {
 
     private transient String address;
     private transient MetadataInfo serviceMetadata;
+    // used at runtime
     private transient Map<String, String> extendParams = new HashMap<>();
 
     public DefaultServiceInstance() {
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/InstanceAddressURL.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/InstanceAddressURL.java
index ca8f9be..f4ec3fe 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/InstanceAddressURL.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/InstanceAddressURL.java
@@ -32,6 +32,8 @@ import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;
 public class InstanceAddressURL extends URL {
     private ServiceInstance instance;
     private MetadataInfo metadataInfo;
+
+    // cached numbers
     private volatile transient Map<String, Number> numbers;
     private volatile transient Map<String, Map<String, Number>> methodNumbers;
 
@@ -353,8 +355,16 @@ public class InstanceAddressURL extends URL {
         return getInstance().hashCode();
     }
 
+    public String getServiceString(String service) {
+        MetadataInfo.ServiceInfo serviceInfo = metadataInfo.getServiceInfo(service);
+        if (serviceInfo == null) {
+            return instance.toString();
+        }
+        return instance.toString() + serviceInfo.toString();
+    }
+
     @Override
     public String toString() {
-        return super.toString();
+        return instance.toString() + metadataInfo.toString();
     }
 }
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/RegistryClusterIdentifier.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/RegistryClusterIdentifier.java
index 76d141a..9d0e4a0 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/RegistryClusterIdentifier.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/RegistryClusterIdentifier.java
@@ -20,16 +20,17 @@ import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.extension.SPI;
 
+import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_CLUSTER_TYPE_KEY;
+
 @SPI
 public interface RegistryClusterIdentifier {
     String providerKey(URL url);
 
     String consumerKey(URL url);
 
-    static RegistryClusterIdentifier getExtension() {
+    static RegistryClusterIdentifier getExtension(URL url) {
         ExtensionLoader<RegistryClusterIdentifier> loader
                 = ExtensionLoader.getExtensionLoader(RegistryClusterIdentifier.class);
-//        return loader.getExtension(ConfigurationUtils.getProperty("dubbo.application.sd.type", "default"));
-        return loader.getExtension("default");
+        return loader.getExtension(url.getParameter(REGISTRY_CLUSTER_TYPE_KEY, "default"));
     }
 }
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 f3d41c5..efd3c57 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
@@ -62,8 +62,7 @@ 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.constants.CommonConstants.VERSION_KEY;
 import static org.apache.dubbo.common.constants.RegistryConstants.PROVIDED_BY;
-import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_CLUSTER;
-import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_KEY;
+import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_CLUSTER_KEY;
 import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_TYPE_KEY;
 import static org.apache.dubbo.common.constants.RegistryConstants.SERVICE_REGISTRY_TYPE;
 import static org.apache.dubbo.common.constants.RegistryConstants.SUBSCRIBED_SERVICE_NAMES_KEY;
@@ -206,8 +205,8 @@ public class ServiceDiscoveryRegistry implements Registry {
 
     public void doRegister(URL url) {
         String registryCluster = serviceDiscovery.getUrl().getParameter(ID_KEY);
-        if (registryCluster != null) {
-            url = url.addParameter(REGISTRY_CLUSTER, registryCluster);
+        if (registryCluster != null && url.getParameter(REGISTRY_CLUSTER_KEY) == null) {
+            url = url.addParameter(REGISTRY_CLUSTER_KEY, registryCluster);
         }
         if (writableMetadataService.exportURL(url)) {
             if (logger.isInfoEnabled()) {
@@ -230,8 +229,8 @@ public class ServiceDiscoveryRegistry implements Registry {
 
     public void doUnregister(URL url) {
         String registryCluster = serviceDiscovery.getUrl().getParameter(ID_KEY);
-        if (registryCluster != null) {
-            url = url.addParameter(REGISTRY_CLUSTER, registryCluster);
+        if (registryCluster != null && url.getParameter(REGISTRY_CLUSTER_KEY) == null) {
+            url = url.addParameter(REGISTRY_CLUSTER_KEY, registryCluster);
         }
         if (writableMetadataService.unexportURL(url)) {
             if (logger.isInfoEnabled()) {
@@ -250,8 +249,8 @@ public class ServiceDiscoveryRegistry implements Registry {
             return;
         }
         String registryCluster = serviceDiscovery.getUrl().getParameter(ID_KEY);
-        if (registryCluster != null) {
-            url = url.addParameter(REGISTRY_KEY, registryCluster);
+        if (registryCluster != null && url.getParameter(REGISTRY_CLUSTER_KEY) == null) {
+            url = url.addParameter(REGISTRY_CLUSTER_KEY, registryCluster);
         }
         doSubscribe(url, listener);
     }
@@ -273,8 +272,8 @@ public class ServiceDiscoveryRegistry implements Registry {
             return;
         }
         String registryCluster = serviceDiscovery.getUrl().getParameter(ID_KEY);
-        if (registryCluster != null) {
-            url = url.addParameter(REGISTRY_KEY, registryCluster);
+        if (registryCluster != null && url.getParameter(REGISTRY_CLUSTER_KEY) == null) {
+            url = url.addParameter(REGISTRY_CLUSTER_KEY, registryCluster);
         }
         doUnsubscribe(url, listener);
     }
@@ -319,9 +318,11 @@ 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_SEPARATOR + url.getParameter(PROTOCOL_KEY, DUBBO)));
+        String protocolServiceKey = url.getServiceKey() + GROUP_CHAR_SEPARATOR + url.getParameter(PROTOCOL_KEY, DUBBO);
 
-        serviceListener.addListener(url.getProtocolServiceKey(), listener);
+        listener.notify(serviceListener.getUrls(protocolServiceKey));
+
+        serviceListener.addListener(protocolServiceKey, listener);
         registerServiceInstancesChangedListener(url, serviceListener);
     }
 
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
index 37b6bf0..6ff7c2a 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
@@ -45,8 +45,8 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.TreeSet;
 
-import static org.apache.dubbo.common.constants.CommonConstants.REGISTER_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;
+import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_CLUSTER_KEY;
 import static org.apache.dubbo.metadata.MetadataInfo.DEFAULT_REVISION;
 import static org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.getExportedServicesRevision;
 
@@ -156,7 +156,8 @@ public class ServiceInstancesChangedListener implements ConditionalEventListener
 
     private MetadataInfo getMetadataInfo(ServiceInstance instance) {
         String metadataType = ServiceInstanceMetadataUtils.getMetadataStorageType(instance);
-        instance.getExtendParams().putIfAbsent(REGISTER_KEY, RegistryClusterIdentifier.getExtension().consumerKey(url));
+        // FIXME, check "REGISTRY_CLUSTER_KEY" must be set by every registry implementation.
+        instance.getExtendParams().putIfAbsent(REGISTRY_CLUSTER_KEY, RegistryClusterIdentifier.getExtension(url).consumerKey(url));
         MetadataInfo metadataInfo;
         try {
             if (REMOTE_METADATA_STORAGE_TYPE.equals(metadataType)) {
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceURLParamsMetadataCustomizer.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceURLParamsMetadataCustomizer.java
index 8b525c7..9cc28a7 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceURLParamsMetadataCustomizer.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceURLParamsMetadataCustomizer.java
@@ -41,7 +41,7 @@ public class MetadataServiceURLParamsMetadataCustomizer implements ServiceInstan
         String propertyValue = resolveMetadataPropertyValue(serviceInstance);
 
         if (!isBlank(propertyName) && !isBlank(propertyValue)) {
-            metadata.put(propertyName, metadata.get(propertyName));
+            metadata.put(propertyName, propertyValue);
         }
     }
 
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataUtils.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataUtils.java
index 5713256..0f0cf3c 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataUtils.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataUtils.java
@@ -244,8 +244,8 @@ public class ServiceInstanceMetadataUtils {
         MetadataInfo metadataInfo = WritableMetadataService.getDefaultExtension().getMetadataInfos().get(registryCluster);
         if (metadataInfo != null) {
             String existingInstanceRevision = instance.getMetadata().get(EXPORTED_SERVICES_REVISION_PROPERTY_NAME);
-            if (!metadataInfo.getRevision().equals(existingInstanceRevision)) {
-                instance.getMetadata().put(EXPORTED_SERVICES_REVISION_PROPERTY_NAME, metadataInfo.getRevision());
+            if (!metadataInfo.calAndGetRevision().equals(existingInstanceRevision)) {
+                instance.getMetadata().put(EXPORTED_SERVICES_REVISION_PROPERTY_NAME, metadataInfo.calAndGetRevision());
                 if (existingInstanceRevision != null) {// skip the first registration.
                     instance.getExtendParams().put(INSTANCE_REVISION_UPDATED_KEY, "true");
                 }
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
index 2b747de..f0281da 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/InMemoryWritableMetadataService.java
@@ -125,10 +125,10 @@ public class InMemoryWritableMetadataService implements WritableMetadataService
 
     @Override
     public boolean exportURL(URL url) {
-        String registryKey = RegistryClusterIdentifier.getExtension().providerKey(url);
-        String[] keys = registryKey.split(",");
-        for (String key : keys) {
-            MetadataInfo metadataInfo = metadataInfos.computeIfAbsent(key, k -> {
+        String registryCluster = RegistryClusterIdentifier.getExtension().providerKey(url);
+        String[] clusters = registryCluster.split(",");
+        for (String cluster : clusters) {
+            MetadataInfo metadataInfo = metadataInfos.computeIfAbsent(cluster, k -> {
                 return new MetadataInfo(ApplicationModel.getName());
             });
             metadataInfo.addService(new ServiceInfo(url));
@@ -139,13 +139,13 @@ public class InMemoryWritableMetadataService implements WritableMetadataService
 
     @Override
     public boolean unexportURL(URL url) {
-        String registryKey = RegistryClusterIdentifier.getExtension().providerKey(url);
-        String[] keys = registryKey.split(",");
-        for (String key : keys) {
-            MetadataInfo metadataInfo = metadataInfos.get(key);
+        String registryCluster = RegistryClusterIdentifier.getExtension().providerKey(url);
+        String[] clusters = registryCluster.split(",");
+        for (String cluster : clusters) {
+            MetadataInfo metadataInfo = metadataInfos.get(cluster);
             metadataInfo.removeService(url.getProtocolServiceKey());
             if (metadataInfo.getServices().isEmpty()) {
-                metadataInfos.remove(key);
+                metadataInfos.remove(cluster);
             }
         }
         metadataSemaphore.release();
@@ -199,7 +199,7 @@ public class InMemoryWritableMetadataService implements WritableMetadataService
         }
         for (Map.Entry<String, MetadataInfo> entry : metadataInfos.entrySet()) {
             MetadataInfo metadataInfo = entry.getValue();
-            if (revision.equals(metadataInfo.getRevision())) {
+            if (revision.equals(metadataInfo.calAndGetRevision())) {
                 return metadataInfo;
             }
         }
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImpl.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImpl.java
index 2d543e5..c4235f4 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImpl.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/store/RemoteMetadataServiceImpl.java
@@ -44,8 +44,7 @@ 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.constants.CommonConstants.TIMESTAMP_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;
-import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_CLUSTER;
-import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_KEY;
+import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_CLUSTER_KEY;
 
 public class RemoteMetadataServiceImpl {
     protected final Logger logger = LoggerFactory.getLogger(getClass());
@@ -61,12 +60,12 @@ public class RemoteMetadataServiceImpl {
 
     public void publishMetadata(String serviceName) {
         Map<String, MetadataInfo> metadataInfos = localMetadataService.getMetadataInfos();
-        metadataInfos.forEach((registryKey, metadataInfo) -> {
+        metadataInfos.forEach((registryCluster, metadataInfo) -> {
             if (!metadataInfo.hasReported()) {
-                SubscriberMetadataIdentifier identifier = new SubscriberMetadataIdentifier(serviceName, metadataInfo.getRevision());
-                metadataInfo.getRevision();
-                metadataInfo.getExtendParams().put(REGISTRY_KEY, registryKey);
-                MetadataReport metadataReport = getMetadataReports().get(registryKey);
+                SubscriberMetadataIdentifier identifier = new SubscriberMetadataIdentifier(serviceName, metadataInfo.calAndGetRevision());
+                metadataInfo.calAndGetRevision();
+                metadataInfo.getExtendParams().put(REGISTRY_CLUSTER_KEY, registryCluster);
+                MetadataReport metadataReport = getMetadataReports().get(registryCluster);
                 if (metadataReport == null) {
                     metadataReport = getMetadataReports().entrySet().iterator().next().getValue();
                 }
@@ -80,7 +79,7 @@ public class RemoteMetadataServiceImpl {
         SubscriberMetadataIdentifier identifier = new SubscriberMetadataIdentifier(instance.getServiceName(),
                 ServiceInstanceMetadataUtils.getExportedServicesRevision(instance));
 
-        String registryCluster = instance.getExtendParams().get(REGISTRY_CLUSTER);
+        String registryCluster = instance.getExtendParams().get(REGISTRY_CLUSTER_KEY);
 
         MetadataReport metadataReport = getMetadataReports().get(registryCluster);
         if (metadataReport == null) {