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 2018/11/20 06:36:40 UTC

[incubator-dubbo] 01/04: if the registry type is zookeeper, use the address as default configcenter address.

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 <ke...@gmail.com>
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();
         }