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/05/29 07:24:44 UTC

[dubbo] branch master updated: support multiple address format (#6209)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 5a827df  support multiple address format (#6209)
5a827df is described below

commit 5a827df766f98afcaa723bb24231c3505bd7dcb8
Author: ken.lj <ke...@gmail.com>
AuthorDate: Fri May 29 15:24:29 2020 +0800

    support multiple address format (#6209)
    
    <dubbo:registry address="zookeeper://127.0.0.1:2181?backup=127.0.0.1:2181|zookeeper://127.0.0.1:2183"/>
---
 .../src/main/java/org/apache/dubbo/config/RegistryConfig.java |  5 ++++-
 .../org/apache/dubbo/config/bootstrap/DubboBootstrap.java     | 11 ++++++++++-
 .../org/apache/dubbo/config/utils/ConfigValidationUtils.java  |  5 ++++-
 3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/RegistryConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/RegistryConfig.java
index 3b868fe..7a8e304 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/RegistryConfig.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/RegistryConfig.java
@@ -25,6 +25,7 @@ import java.util.Map;
 
 import static org.apache.dubbo.common.constants.CommonConstants.EXTRA_KEYS_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_KEY;
+import static org.apache.dubbo.common.constants.RemotingConstants.BACKUP_KEY;
 import static org.apache.dubbo.config.Constants.REGISTRIES_SUFFIX;
 
 /**
@@ -216,7 +217,9 @@ public class RegistryConfig extends AbstractConfig {
 //                updateIdIfAbsent(url.getProtocol());
                 updateProtocolIfAbsent(url.getProtocol());
                 updatePortIfAbsent(url.getPort());
-                updateParameters(url.getParameters());
+                Map<String, String> params = url.getParameters();
+                params.remove(BACKUP_KEY);
+                updateParameters(params);
             } catch (Exception ignored) {
             }
         }
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 eee642b..cd92fe5 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
@@ -91,6 +91,7 @@ import static java.util.concurrent.Executors.newSingleThreadExecutor;
 import static org.apache.dubbo.common.config.ConfigurationUtils.parseProperties;
 import static org.apache.dubbo.common.config.configcenter.DynamicConfiguration.getDynamicConfiguration;
 import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA_STORAGE_TYPE;
+import static org.apache.dubbo.common.constants.CommonConstants.REGISTRY_SPLIT_PATTERN;
 import static org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;
 import static org.apache.dubbo.common.function.ThrowableAction.execute;
 import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;
@@ -661,7 +662,7 @@ public class DubboBootstrap extends GenericEventListener {
                     cc.getParameters().put(CLIENT_KEY, registryConfig.getClient());
                     cc.setProtocol(registryConfig.getProtocol());
                     cc.setPort(registryConfig.getPort());
-                    cc.setAddress(registryConfig.getAddress());
+                    cc.setAddress(getRegistryCompatibleAddress(registryConfig.getAddress()));
                     cc.setNamespace(registryConfig.getGroup());
                     cc.setUsername(registryConfig.getUsername());
                     cc.setPassword(registryConfig.getPassword());
@@ -674,6 +675,14 @@ public class DubboBootstrap extends GenericEventListener {
         startConfigCenter();
     }
 
+    private String getRegistryCompatibleAddress(String registryAddress) {
+        String[] addresses = REGISTRY_SPLIT_PATTERN.split(registryAddress);
+        if (addresses == null || addresses.length == 0) {
+            throw new IllegalStateException("Invalid registry address found.");
+        }
+        return addresses[0];
+    }
+
     private void loadRemoteConfigs() {
         // registry ids to registry configs
         List<RegistryConfig> tmpRegistries = new ArrayList<>();
diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
index 43a2f5b..ba8b9a7 100644
--- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
+++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
@@ -89,6 +89,7 @@ import static org.apache.dubbo.common.constants.CommonConstants.VERSION_KEY;
 import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_KEY;
 import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_PROTOCOL;
 import static org.apache.dubbo.common.constants.RegistryConstants.SERVICE_REGISTRY_PROTOCOL;
+import static org.apache.dubbo.common.constants.RemotingConstants.BACKUP_KEY;
 import static org.apache.dubbo.common.extension.ExtensionLoader.getExtensionLoader;
 import static org.apache.dubbo.common.utils.UrlUtils.isServiceDiscoveryRegistryType;
 import static org.apache.dubbo.config.Constants.ARCHITECTURE;
@@ -571,7 +572,9 @@ public class ConfigValidationUtils {
             return;
         }
         for (Map.Entry<String, String> entry : parameters.entrySet()) {
-            checkNameHasSymbol(entry.getKey(), entry.getValue());
+            if (!entry.getKey().equals(BACKUP_KEY)) {
+                checkNameHasSymbol(entry.getKey(), entry.getValue());
+            }
         }
     }