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();
}