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 e3916ef64ade94129dc7866909ee4c2e237838cd
Author: ken.lj <ken.lj...@gmail.com>
AuthorDate: Thu Nov 15 10:58:39 2018 +0800

    add cluster-style address support for configcenter
---
 .../java/org/apache/dubbo/common/Constants.java    |  2 +-
 .../org/apache/dubbo/config/AbstractConfig.java    |  2 +-
 .../dubbo/config/AbstractInterfaceConfig.java      | 16 ++++-
 .../org/apache/dubbo/config/ApplicationConfig.java | 24 +------
 .../apache/dubbo/config/ConfigCenterConfig.java    | 84 ++++++++++++----------
 .../org/apache/dubbo/config/ServiceConfig.java     | 15 +++-
 .../apache/dubbo/config/context/Environment.java   | 22 ++++++
 .../org/apache/dubbo/config/support/Parameter.java |  2 +
 .../dubbo/config/spring/ConfigCenterBean.java      | 40 +++++++----
 .../src/main/resources/META-INF/compat/dubbo.xsd   |  4 +-
 .../src/main/resources/META-INF/dubbo.xsd          |  4 +-
 .../META-INF/spring/dubbo-demo-consumer.xml        |  2 +-
 .../META-INF/spring/dubbo-demo-provider.xml        |  2 +-
 .../governance/DynamicConfigurationFactory.java    |  2 +-
 .../support/apollo/ApolloDynamicConfiguration.java |  2 +-
 .../archaius/ArchaiusDynamicConfiguration.java     |  2 +-
 16 files changed, 138 insertions(+), 87 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/Constants.java 
b/dubbo-common/src/main/java/org/apache/dubbo/common/Constants.java
index a4b64ca..2d01407 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/Constants.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/Constants.java
@@ -58,7 +58,7 @@ public class Constants {
 
     public static final String ROUTERS_SUFFIX = ".routers";
 
-    public static final String CONFIG_TYPE_KEY = "config.type";
+    public static final String DEFAULT_CONFIG_PROTOCOL = "nop";
     public static final String CONFIG_ADDRESS_KEY = "config.address";
     public static final String CONFIG_ENV_KEY = "config.env";
     public static final String CONFIG_CLUSTER_KEY = "config.cluster";
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
index ffb0f03..243e8d2 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
@@ -570,7 +570,7 @@ public abstract class AbstractConfig implements 
Serializable {
             getter = getClass().getMethod("is" + propertyName);
         }
         Parameter parameter = getter.getAnnotation(Parameter.class);
-        if (parameter != null && StringUtils.isNotEmpty(parameter.key())) {
+        if (parameter != null && StringUtils.isNotEmpty(parameter.key()) && 
parameter.propertyKey()) {
             propertyName = parameter.key();
         } else {
             propertyName = propertyName.toLowerCase();
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 6e41fe6..e1f42ad 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
@@ -25,6 +25,7 @@ import org.apache.dubbo.common.utils.NetUtils;
 import org.apache.dubbo.common.utils.ReflectUtils;
 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.metadata.integration.MetadataReportService;
 import org.apache.dubbo.monitor.MonitorFactory;
@@ -36,6 +37,7 @@ import org.apache.dubbo.rpc.cluster.Cluster;
 import org.apache.dubbo.rpc.support.MockInvoker;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -125,8 +127,18 @@ public abstract class AbstractInterfaceConfig extends 
AbstractMethodConfig {
 
         if (registries == null || registries.isEmpty()) {
             registries = new ArrayList<>();
-            RegistryConfig registryConfig = new RegistryConfig();
-            registries.add(registryConfig);
+            String registryIds = 
Environment.getInstance().getStartupCompositeConf(null, 
null).getString("dubbo.registries");
+            if (StringUtils.isNotEmpty(registryIds)) {
+                Arrays.stream(Constants.COMMA_SPLIT_PATTERN.split(registryIds))
+                        .map(regId -> {
+                            RegistryConfig registryConfig = new 
RegistryConfig();
+                            registryConfig.setId(regId);
+                            return registryConfig;
+                        })
+                        .forEach(registries::add);
+            } else {
+                registries.add(new RegistryConfig());
+            }
         }
 
         for (RegistryConfig registryConfig : registries) {
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ApplicationConfig.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ApplicationConfig.java
index 6328725..f4c529a 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ApplicationConfig.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ApplicationConfig.java
@@ -81,10 +81,6 @@ public class ApplicationConfig extends AbstractConfig {
     // should we accept foreign ip or not?
     private Boolean qosAcceptForeignIp;
 
-    // used for dynamic configuration
-    private String config;
-    private String address;
-
     // customized parameters
     private Map<String, String> parameters;
 
@@ -99,7 +95,7 @@ public class ApplicationConfig extends AbstractConfig {
         setName(name);
     }
 
-    @Parameter(key = Constants.APPLICATION_KEY, required = true)
+    @Parameter(key = Constants.APPLICATION_KEY, required = true, propertyKey = 
false)
     public String getName() {
         return name;
     }
@@ -255,24 +251,6 @@ public class ApplicationConfig extends AbstractConfig {
         this.qosAcceptForeignIp = qosAcceptForeignIp;
     }
 
-    @Parameter(key = "config.type")
-    public String getConfig() {
-        return config;
-    }
-
-    public void setConfig(String config) {
-        this.config = config;
-    }
-
-    @Parameter(key = "config.address")
-    public String getAddress() {
-        return address;
-    }
-
-    public void setAddress(String address) {
-        this.address = address;
-    }
-
     public Map<String, String> getParameters() {
         return parameters;
     }
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 da0151f..6904413 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
@@ -20,6 +20,7 @@ import org.apache.dubbo.common.Constants;
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 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.governance.DynamicConfiguration;
@@ -35,7 +36,7 @@ import java.util.Properties;
  *
  */
 public class ConfigCenterConfig extends AbstractConfig {
-    private String type;
+    private String protocol;
     private String address;
     private String env;
     private String cluster;
@@ -61,46 +62,50 @@ public class ConfigCenterConfig extends AbstractConfig {
     public ConfigCenterConfig() {
     }
 
-    private URL toConfigUrl() {
-        String host = address;
-        int port = 0;
+    public void init() {
+        DynamicConfiguration dynamicConfiguration = 
startDynamicConfiguration();
+        String configContent = dynamicConfiguration.getConfig(configfile, 
group);
+
+        String appGroup = getApplicationName();
+        String appConfigContent = null;
+        if (StringUtils.isNotEmpty(appGroup)) {
+            appConfigContent = dynamicConfiguration.getConfig
+                    (
+                            StringUtils.isNotEmpty(localconfigfile) ? 
localconfigfile : configfile,
+                            appGroup
+                    );
+        }
         try {
-            if (StringUtils.isNotEmpty(address)) {
-                String[] addrs = address.split(":");
-                if (addrs.length == 2) {
-                    host = addrs[0];
-                    port = Integer.parseInt(addrs[1]);
-                }
-            }
-        } catch (Exception e) {
-            throw e;
+            Environment.getInstance().setConfigCenterFirst(priority);
+            
Environment.getInstance().updateExternalConfigurationMap(parseProperties(configContent));
+            
Environment.getInstance().updateAppExternalConfigurationMap(parseProperties(appConfigContent));
+        } catch (IOException e) {
+            throw new IllegalStateException("Failed to parse configurations 
from Config Center.", e);
         }
-
-        Map<String, String> map = this.getMetaData();
-        return new URL(Constants.CONFIG_PROTOCOL, username, password, host, 
port, ConfigCenterConfig.class.getSimpleName(), map);
     }
 
-    public void init() {
+    /*public void initWithoutRemoteConfig() {
+        startDynamicConfiguration();
+    }*/
+
+    private DynamicConfiguration startDynamicConfiguration() {
         // give jvm properties the chance to override local configs, e.g., 
-Ddubbo.configcenter.config.priority
         refresh();
+//        checkConfigCenter();
 
         URL url = toConfigUrl();
         DynamicConfiguration dynamicConfiguration = 
ExtensionLoader.getExtensionLoader(DynamicConfigurationFactory.class).getAdaptiveExtension().getDynamicConfiguration(url);
         
Environment.getInstance().setDynamicConfiguration(dynamicConfiguration);
-        String configContent = dynamicConfiguration.getConfig(configfile, 
group);
+        return dynamicConfiguration;
+    }
 
-        String appConfigContent = dynamicConfiguration.getConfig
-                (
-                        StringUtils.isNotEmpty(localconfigfile) ? 
localconfigfile : configfile,
-                        getApplicationName()
-                );
-        try {
-            Environment.getInstance().setConfigCenterFirst(priority);
-            
Environment.getInstance().updateExternalConfigurationMap(parseProperties(configContent));
-            
Environment.getInstance().updateAppExternalConfigurationMap(parseProperties(appConfigContent));
-        } catch (IOException e) {
-            throw new IllegalStateException("Failed to parse configurations 
from Config Center.", e);
+    private URL toConfigUrl() {
+        Map<String, String> map = this.getMetaData();
+        if (StringUtils.isNotEmpty(env) && StringUtils.isEmpty(address)) {
+            address = Constants.ANYHOST_VALUE;
         }
+        map.put(Constants.PATH_KEY, ConfigCenterConfig.class.getSimpleName());
+        return UrlUtils.parseURL(address, map);
     }
 
     private String getApplicationName() {
@@ -116,7 +121,7 @@ public class ConfigCenterConfig extends AbstractConfig {
 
     protected Map<String, String> parseProperties(String content) throws 
IOException {
         Map<String, String> map = new HashMap<>();
-        if (content == null) {
+        if (StringUtils.isEmpty(content)) {
             logger.warn("You specified the config centre, but there's not even 
one single config item in it.");
         } else {
             Properties properties = new Properties();
@@ -128,16 +133,16 @@ public class ConfigCenterConfig extends AbstractConfig {
         return map;
     }
 
-    @Parameter(key = Constants.CONFIG_TYPE_KEY)
-    public String getType() {
-        return type;
+
+    public String getProtocol() {
+        return protocol;
     }
 
-    public void setType(String type) {
-        this.type = type;
+    public void setProtocol(String protocol) {
+        this.protocol = protocol;
     }
 
-    @Parameter(key = Constants.CONFIG_ADDRESS_KEY)
+    @Parameter(excluded = true)
     public String getAddress() {
         return address;
     }
@@ -268,4 +273,11 @@ public class ConfigCenterConfig extends AbstractConfig {
     public void setApplication(ApplicationConfig application) {
         this.application = application;
     }
+
+    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.");
+        }
+    }
 }
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
index 4d314ef..394a8f6 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java
@@ -26,6 +26,7 @@ import org.apache.dubbo.common.utils.ConfigUtils;
 import org.apache.dubbo.common.utils.NamedThreadFactory;
 import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.config.annotation.Service;
+import org.apache.dubbo.config.context.Environment;
 import org.apache.dubbo.config.invoker.DelegateProviderMetaDataInvoker;
 import org.apache.dubbo.config.support.Parameter;
 import org.apache.dubbo.metadata.integration.MetadataReportService;
@@ -729,7 +730,19 @@ public class ServiceConfig<T> extends 
AbstractServiceConfig {
         }
         // backward compatibility
         if (protocols == null || protocols.isEmpty()) {
-            setProtocol(new ProtocolConfig());
+            //check 'dubbo.protocols=dubboProtocolId,hessianProtocolId' and 
decide if we need multiple protocols
+            String protocolIds = 
Environment.getInstance().getStartupCompositeConf(null, 
null).getString("dubbo.protocols");
+            if (StringUtils.isNotEmpty(protocolIds)) {
+                Arrays.stream(Constants.COMMA_SPLIT_PATTERN.split(protocolIds))
+                        .map(pId -> {
+                            ProtocolConfig protocolConfig = new 
ProtocolConfig();
+                            protocolConfig.setId(pId);
+                            return protocolConfig;
+                        })
+                        .forEach(protocols::add);
+            } else {
+                setProtocol(new ProtocolConfig());
+            }
         }
         for (ProtocolConfig protocolConfig : protocols) {
             if (StringUtils.isEmpty(protocolConfig.getName())) {
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/Environment.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/Environment.java
index 0a2bf12..c3e07cc 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/Environment.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/context/Environment.java
@@ -25,6 +25,7 @@ import org.apache.dubbo.common.config.PropertiesConfiguration;
 import org.apache.dubbo.common.config.SystemConfiguration;
 import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.utils.StringUtils;
+import org.apache.dubbo.config.ConfigCenterConfig;
 import org.apache.dubbo.governance.DynamicConfiguration;
 import org.apache.dubbo.governance.DynamicConfigurationFactory;
 
@@ -49,6 +50,7 @@ public class Environment {
     private volatile DynamicConfiguration dynamicConfiguration;
 
     private volatile boolean isConfigCenterFirst = true;
+    private volatile ConfigCenterConfig configCenter;
 
     private Map<String, String> externalConfigurationMap = new HashMap<>();
     private Map<String, String> appExternalConfigurationMap = new HashMap<>();
@@ -85,6 +87,26 @@ public class Environment {
         return environmentConfsHolder.computeIfAbsent(toKey(prefix, id), k -> 
new EnvironmentConfiguration(prefix, id));
     }
 
+    public void setConfigCenter(ConfigCenterConfig configCenter) {
+        this.configCenter = configCenter;
+    }
+
+    public synchronized void setExternalConfiguration(Map<String, String> 
externalConfiguration) {
+        this.externalConfigurationMap = externalConfiguration;
+        if (configCenter == null) {
+            configCenter = new ConfigCenterConfig();
+        }
+        configCenter.init();
+    }
+
+    public synchronized void setAppExternalConfiguration(Map<String, String> 
appExternalConfiguration) {
+        this.appExternalConfigurationMap = appExternalConfiguration;
+        if (configCenter == null) {
+            configCenter = new ConfigCenterConfig();
+        }
+        configCenter.init();
+    }
+
     public void updateExternalConfigurationMap(Map<String, String> 
externalMap) {
         this.externalConfigurationMap.putAll(externalMap);
     }
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/support/Parameter.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/support/Parameter.java
index 0183a22..56336aa 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/support/Parameter.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/support/Parameter.java
@@ -42,4 +42,6 @@ public @interface Parameter {
 
     boolean append() default false;
 
+    boolean propertyKey() default true;
+
 }
\ No newline at end of file
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 a0bc0a6..0ff972a 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
@@ -19,6 +19,7 @@ package org.apache.dubbo.config.spring;
 import org.apache.dubbo.config.ApplicationConfig;
 import org.apache.dubbo.config.ConfigCenterConfig;
 import org.apache.dubbo.config.spring.extension.SpringExtensionFactory;
+import org.apache.dubbo.config.support.Parameter;
 import org.springframework.beans.factory.BeanFactoryUtils;
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.InitializingBean;
@@ -83,18 +84,28 @@ public class ConfigCenterBean extends ConfigCenterConfig 
implements Initializing
     @Override
     public void setEnvironment(Environment environment) {
         if (auto) {
-            Object rawProperties = environment.getProperty("dubbo.properties", 
Object.class);
-            Map<String, String> externalProperties = new HashMap<>();
-            try {
-                if (rawProperties instanceof Map) {
-                    externalProperties.putAll((Map<String, String>) 
rawProperties);
-                } else if (rawProperties instanceof String) {
-                    externalProperties.putAll(parseProperties((String) 
rawProperties));
-                }
+            Map<String, String> externalProperties = 
getConfigurations(getConfigfile(), environment);
+            Map<String, String> appExternalProperties = 
getConfigurations("application." + getConfigfile(), environment);
+            
org.apache.dubbo.config.context.Environment.getInstance().setConfigCenter(this);
+            
org.apache.dubbo.config.context.Environment.getInstance().setExternalConfiguration(externalProperties);
+            
org.apache.dubbo.config.context.Environment.getInstance().setAppExternalConfiguration(appExternalProperties);
+        }
+    }
+
+    private Map<String, String> getConfigurations(String key, Environment 
environment) {
+        Object rawProperties = environment.getProperty(key, Object.class);
+        Map<String, String> externalProperties = new HashMap<>();
+        try {
+            if (rawProperties instanceof Map) {
+                externalProperties.putAll((Map<String, String>) rawProperties);
+            } else if (rawProperties instanceof String) {
+                externalProperties.putAll(parseProperties((String) 
rawProperties));
+            }
 
-                if (environment instanceof ConfigurableEnvironment && 
externalProperties.isEmpty()) {
-                    ConfigurableEnvironment configurableEnvironment = 
(ConfigurableEnvironment) environment;
-                    PropertySource propertySource = 
configurableEnvironment.getPropertySources().get("dubbo.properties");
+            if (environment instanceof ConfigurableEnvironment && 
externalProperties.isEmpty()) {
+                ConfigurableEnvironment configurableEnvironment = 
(ConfigurableEnvironment) environment;
+                PropertySource propertySource = 
configurableEnvironment.getPropertySources().get(key);
+                if (propertySource != null) {
                     Object source = propertySource.getSource();
                     if (source instanceof Map) {
                         ((Map<String, Object>) source).forEach((k, v) -> {
@@ -102,13 +113,14 @@ public class ConfigCenterBean extends ConfigCenterConfig 
implements Initializing
                         });
                     }
                 }
-                
org.apache.dubbo.config.context.Environment.getInstance().updateExternalConfigurationMap(externalProperties);
-            } catch (Exception e) {
-                throw new IllegalStateException(e);
             }
+        } catch (Exception e) {
+            throw new IllegalStateException(e);
         }
+        return externalProperties;
     }
 
+    @Parameter(excluded = true)
     public boolean isAuto() {
         return auto;
     }
diff --git 
a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd 
b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
index 9810969..b1a2fc3 100644
--- 
a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
+++ 
b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/compat/dubbo.xsd
@@ -597,9 +597,9 @@
         <xsd:sequence minOccurs="0" maxOccurs="unbounded">
             <xsd:element ref="parameter" minOccurs="0" maxOccurs="unbounded"/>
         </xsd:sequence>
-        <xsd:attribute name="type" type="xsd:string" use="required">
+        <xsd:attribute name="protocol" type="xsd:string" use="optional">
             <xsd:annotation>
-                <xsd:documentation><![CDATA[ The config center type. 
]]></xsd:documentation>
+                <xsd:documentation><![CDATA[ The config center protocol. 
]]></xsd:documentation>
             </xsd:annotation>
         </xsd:attribute>
         <xsd:attribute name="address" type="xsd:string" use="optional">
diff --git 
a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd 
b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
index b2ff6cb..51b29f5 100644
--- a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
+++ b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd
@@ -591,9 +591,9 @@
         <xsd:sequence minOccurs="0" maxOccurs="unbounded">
             <xsd:element ref="parameter" minOccurs="0" maxOccurs="unbounded"/>
         </xsd:sequence>
-        <xsd:attribute name="type" type="xsd:string" use="required">
+        <xsd:attribute name="protocol" type="xsd:string">
             <xsd:annotation>
-                <xsd:documentation><![CDATA[ The config center type. 
]]></xsd:documentation>
+                <xsd:documentation><![CDATA[ The config center protocol. 
]]></xsd:documentation>
             </xsd:annotation>
         </xsd:attribute>
         <xsd:attribute name="address" type="xsd:string" use="optional">
diff --git 
a/dubbo-demo/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-demo-consumer.xml
 
b/dubbo-demo/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-demo-consumer.xml
index 108b566..dc303db 100644
--- 
a/dubbo-demo/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-demo-consumer.xml
+++ 
b/dubbo-demo/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-demo-consumer.xml
@@ -27,7 +27,7 @@
 
     <dubbo:registry group="dubboregistrygroup1" 
address="zookeeper://127.0.0.1:2181"/>
 
-    <dubbo:configcenter type="zookeeper" address="127.0.0.1:2181" 
namespace="dubboregistrygroup1"
+    <dubbo:configcenter protocol="zookeeper" address="127.0.0.1:2181" 
namespace="dubboregistrygroup1"
                         configfile="dubbo.properties"/>
 
     <!-- generate proxy for the remote service, then demoService can be used 
in the same way as the
diff --git 
a/dubbo-demo/dubbo-demo-provider/src/main/resources/META-INF/spring/dubbo-demo-provider.xml
 
b/dubbo-demo/dubbo-demo-provider/src/main/resources/META-INF/spring/dubbo-demo-provider.xml
index 7af535e..566a7c7 100644
--- 
a/dubbo-demo/dubbo-demo-provider/src/main/resources/META-INF/spring/dubbo-demo-provider.xml
+++ 
b/dubbo-demo/dubbo-demo-provider/src/main/resources/META-INF/spring/dubbo-demo-provider.xml
@@ -28,7 +28,7 @@
     <dubbo:registry group="dubboregistrygroup1" 
address="zookeeper://127.0.0.1:2181" simple="false">
     </dubbo:registry>
 
-    <dubbo:configcenter type="zookeeper" address="127.0.0.1:2181" 
namespace="dubboregistrygroup1"
+    <dubbo:configcenter 
address="zookeeper://127.0.0.1:2181?backup=127.0.0.1:2182" 
namespace="dubboregistrygroup1"
                         configfile="dubbo.properties" appname="demo-provider"/>
 
     <!-- use dubbo protocol to export service on port 20880 -->
diff --git 
a/dubbo-governance/dubbo-governance-api/src/main/java/org/apache/dubbo/governance/DynamicConfigurationFactory.java
 
b/dubbo-governance/dubbo-governance-api/src/main/java/org/apache/dubbo/governance/DynamicConfigurationFactory.java
index d986eae..d4340d8 100644
--- 
a/dubbo-governance/dubbo-governance-api/src/main/java/org/apache/dubbo/governance/DynamicConfigurationFactory.java
+++ 
b/dubbo-governance/dubbo-governance-api/src/main/java/org/apache/dubbo/governance/DynamicConfigurationFactory.java
@@ -27,7 +27,7 @@ import org.apache.dubbo.common.extension.SPI;
 @SPI("nop")
 public interface DynamicConfigurationFactory {
 
-    @Adaptive({Constants.CONFIG_TYPE_KEY})
+    @Adaptive({Constants.PROTOCOL_KEY})
     DynamicConfiguration getDynamicConfiguration(URL url);
 
     DynamicConfiguration getExistedDynamicConfiguration();
diff --git 
a/dubbo-governance/dubbo-governance-apollo/src/main/java/org/apache/dubbo/governance/support/apollo/ApolloDynamicConfiguration.java
 
b/dubbo-governance/dubbo-governance-apollo/src/main/java/org/apache/dubbo/governance/support/apollo/ApolloDynamicConfiguration.java
index 749f290..f74ec14 100644
--- 
a/dubbo-governance/dubbo-governance-apollo/src/main/java/org/apache/dubbo/governance/support/apollo/ApolloDynamicConfiguration.java
+++ 
b/dubbo-governance/dubbo-governance-apollo/src/main/java/org/apache/dubbo/governance/support/apollo/ApolloDynamicConfiguration.java
@@ -59,7 +59,7 @@ public class ApolloDynamicConfiguration extends 
AbstractDynamicConfiguration<Con
 //        String configEnv = env.getCompositeConf().getString(ENV_KEY);
 //        String configCluster = env.getCompositeConf().getString(CLUSTER_KEY);
         String configEnv = url.getParameter(Constants.CONFIG_ENV_KEY);
-        String configAddr = url.getAddress();
+        String configAddr = url.getBackupAddress();
         String configCluster = url.getParameter(Constants.CONFIG_CLUSTER_KEY);
         if (configEnv != null) {
             System.setProperty(APOLLO_ENV_KEY, configEnv);
diff --git 
a/dubbo-governance/dubbo-governance-zookeeper/src/main/java/org/apache/dubbo/governance/support/archaius/ArchaiusDynamicConfiguration.java
 
b/dubbo-governance/dubbo-governance-zookeeper/src/main/java/org/apache/dubbo/governance/support/archaius/ArchaiusDynamicConfiguration.java
index e35f95d..15e24bd 100644
--- 
a/dubbo-governance/dubbo-governance-zookeeper/src/main/java/org/apache/dubbo/governance/support/archaius/ArchaiusDynamicConfiguration.java
+++ 
b/dubbo-governance/dubbo-governance-zookeeper/src/main/java/org/apache/dubbo/governance/support/archaius/ArchaiusDynamicConfiguration.java
@@ -43,7 +43,7 @@ public class ArchaiusDynamicConfiguration extends 
AbstractDynamicConfiguration<R
         //  String address = env.getCompositeConf().getString(ADDRESS_KEY);
         //  String app = env.getCompositeConf().getString(APP_KEY);
 
-        String address = url.getParameter(Constants.CONFIG_ADDRESS_KEY, 
url.getAddress());
+        String address = url.getBackupAddress();
         if (!address.equals(Constants.ANYHOST_VALUE)) {
             
System.setProperty(ZooKeeperConfigurationSource.ARCHAIUS_SOURCE_ADDRESS_KEY, 
address);
         }

Reply via email to