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 <ken.lj...@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()); + } } }