This is an automated email from the ASF dual-hosted git repository. liujun pushed a commit to branch dev-metadata in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
commit c880720724d27458475b638f9f70a0ebee5dd0b4 Author: ken.lj <[email protected]> AuthorDate: Mon Nov 19 19:50:42 2018 +0800 if the registry type is zookeeper, use the address as default configcenter address. --- .../dubbo/config/AbstractInterfaceConfig.java | 18 ++++++++++++ .../apache/dubbo/config/ConfigCenterConfig.java | 34 +++++++++++++++++++++- .../org/apache/dubbo/config/RegistryConfig.java | 16 ++++++++++ .../dubbo/config/spring/ConfigCenterBean.java | 21 +++++++++++++ 4 files changed, 88 insertions(+), 1 deletion(-) diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java index b572f5e..34fc01f 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java @@ -20,6 +20,7 @@ import org.apache.dubbo.common.Constants; import org.apache.dubbo.common.URL; import org.apache.dubbo.common.Version; import org.apache.dubbo.common.extension.ExtensionLoader; +import org.apache.dubbo.common.utils.CollectionUtils; import org.apache.dubbo.common.utils.ConfigUtils; import org.apache.dubbo.common.utils.NetUtils; import org.apache.dubbo.common.utils.ReflectUtils; @@ -27,6 +28,7 @@ import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.common.utils.UrlUtils; import org.apache.dubbo.config.context.Environment; import org.apache.dubbo.config.support.Parameter; +import org.apache.dubbo.configcenter.DynamicConfiguration; import org.apache.dubbo.metadata.integration.MetadataReportService; import org.apache.dubbo.monitor.MonitorFactory; import org.apache.dubbo.monitor.MonitorService; @@ -41,6 +43,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import static org.apache.dubbo.common.Constants.APPLICATION_KEY; @@ -150,6 +153,17 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { throw new IllegalStateException("No registry config found or it's not a valid config!"); } } + + // For compatibility purpose, use registry as the default config center if there's no one specified explicitly. + RegistryConfig registry = registries.get(0); + if (registry.isZookeeperProtocol()) { + Set<Object> loadedConfigurations = ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getLoadedExtensionInstances(); + if (CollectionUtils.isEmpty(loadedConfigurations)) { + ConfigCenterConfig configCenterConfig = new ConfigCenterConfig(); + configCenterConfig.setProtocol(registry.getProtocol()); + configCenterConfig.setAddress(registry.getAddress()); + } + } } @SuppressWarnings("deprecation") @@ -209,6 +223,10 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { } } + protected void checkConfigCenter() { + + } + protected List<URL> loadRegistries(boolean provider) { // check && override if necessary checkRegistry(); diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java index f753126..3d7c212 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java @@ -54,6 +54,7 @@ public class ConfigCenterConfig extends AbstractConfig { private String localconfigfile; private ApplicationConfig application; + private RegistryConfig registry; // customized parameters private Map<String, String> parameters; @@ -93,6 +94,11 @@ public class ConfigCenterConfig extends AbstractConfig { // give jvm properties the chance to override local configs, e.g., -Ddubbo.configcenter.config.priority refresh(); + // try to use registryConfig as the default configcenter, only applies to zookeeper. + if (!isValid() && registry != null && registry.isZookeeperProtocol()) { + setAddress(registry.getAddress()); + setProtocol(registry.getProtocol()); + } // checkConfigCenter(); URL url = toConfigUrl(); @@ -114,6 +120,10 @@ public class ConfigCenterConfig extends AbstractConfig { address = Constants.ANYHOST_VALUE; } map.put(Constants.PATH_KEY, ConfigCenterConfig.class.getSimpleName()); + // use 'zookeeper' as the default configcenter. + if (StringUtils.isEmpty(map.get(Constants.PROTOCOL_KEY))) { + map.put(Constants.PROTOCOL_KEY, "zookeeper"); + } return UrlUtils.parseURL(address, map); } @@ -142,7 +152,6 @@ public class ConfigCenterConfig extends AbstractConfig { return map; } - public String getProtocol() { return protocol; } @@ -283,10 +292,33 @@ public class ConfigCenterConfig extends AbstractConfig { this.application = application; } + public RegistryConfig getRegistry() { + return registry; + } + + public void setRegistry(RegistryConfig registry) { + this.registry = registry; + } + private void checkConfigCenter() { if ((StringUtils.isEmpty(env) && StringUtils.isEmpty(address)) || (StringUtils.isEmpty(protocol) && (StringUtils.isEmpty(address) || !address.contains("://")))) { throw new IllegalStateException("You must specify the right parameter for configcenter."); } } + + @Override + public boolean isValid() { + if (StringUtils.isEmpty(address) && StringUtils.isEmpty(env)) { + return false; + } + if (StringUtils.isNotEmpty(address)) { + if (!address.contains("://") && StringUtils.isEmpty(protocol)) { + return false; + } + } else if (StringUtils.isNotEmpty(env) && StringUtils.isEmpty(protocol)) { + return false; + } + return true; + } } diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryConfig.java index 8089de2..4e4c354 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/RegistryConfig.java @@ -335,6 +335,22 @@ public class RegistryConfig extends AbstractConfig { this.isDefault = isDefault; } + public boolean isZookeeperProtocol() { + boolean isZookeeper = StringUtils.isNotEmpty(this.getProtocol()) && this.getProtocol().equals("zookeeper"); + if (!isZookeeper) { + String address = this.getAddress(); + int index = address.indexOf("://"); + if (StringUtils.isNotEmpty(address) && index >= 0) { + address = address.substring(0, index); + } + if (address.equals("zookeeper")) { + isZookeeper = true; + } + } + return isZookeeper; + } + + @Override public boolean isValid() { // empty protocol will default to 'dubbo' return !StringUtils.isEmpty(address); diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ConfigCenterBean.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ConfigCenterBean.java index 0ff972a..1a20434 100644 --- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ConfigCenterBean.java +++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ConfigCenterBean.java @@ -18,6 +18,7 @@ package org.apache.dubbo.config.spring; import org.apache.dubbo.config.ApplicationConfig; import org.apache.dubbo.config.ConfigCenterConfig; +import org.apache.dubbo.config.RegistryConfig; import org.apache.dubbo.config.spring.extension.SpringExtensionFactory; import org.apache.dubbo.config.support.Parameter; import org.springframework.beans.factory.BeanFactoryUtils; @@ -30,7 +31,9 @@ import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.Environment; import org.springframework.core.env.PropertySource; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -71,6 +74,24 @@ public class ConfigCenterBean extends ConfigCenterConfig implements Initializing } } + if ((getRegistry() == null)) { + List<RegistryConfig> registryConfigs = new ArrayList<>(); + if (getApplication() == null || getApplication().getRegistries() == null || getApplication().getRegistries().isEmpty()) { + registryConfigs = getApplication().getRegistries(); + } else { + Map<String, RegistryConfig> registryConfigMap = applicationContext == null ? null : BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext, RegistryConfig.class, false, false); + if (registryConfigMap != null && registryConfigMap.size() > 0) { + registryConfigs.addAll(registryConfigMap.values()); + } + } + for (RegistryConfig config : registryConfigs) { + if (config.isDefault() == null || config.isDefault() && config.isZookeeperProtocol()) { + setRegistry(config); + break; + } + } + } + if (!auto) { this.init(); }
