You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@dubbo.apache.org by li...@apache.org on 2018/12/24 07:10:25 UTC

[incubator-dubbo-samples] 02/03: optimize samples for 2.7.0

This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch samples-for-2.7.0-SNAPSHOT
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo-samples.git

commit c6d502971116f12b27d81f45c49d3ad7e411d1ff
Author: ken.lj <ke...@gmail.com>
AuthorDate: Tue Dec 18 13:42:43 2018 +0800

    optimize samples for 2.7.0
---
 .../apache/dubbo/samples/client/Application.java   |  16 +-
 .../dubbo-samples-concurrency-api}/pom.xml         |  23 +-
 .../apache/dubbo/samples/governance}/ZKTools.java  |  73 ++++--
 .../samples/governance/api/AmericanService.java    |  24 +-
 .../dubbo/samples/governance/api/CatService.java   |  24 +-
 .../samples/governance/api/ChineseService.java     |  24 +-
 .../dubbo/samples/governance/api/DogService.java   |  24 +-
 .../dubbo/samples/governance/api/LionService.java  |  24 +-
 .../dubbo/samples/governance/api/TigerService.java |  24 +-
 .../dubbo-samples-concurrency-backend}/pom.xml     |  22 +-
 .../dubbo/samples/governance/BackendProvider.java  |   8 +-
 .../samples/governance/impl/CatServiceImpl.java    |  31 +--
 .../samples/governance/impl/DogServiceImpl.java    |  36 +--
 .../samples/governance/impl/LionServiceImpl.java   |  31 +--
 .../samples/governance/impl/TigerServiceImpl.java  |  31 +--
 .../src/main/resources/log4j.properties            |  20 +-
 .../main/resources/spring/dubbo-demo-provider.xml  |  22 +-
 .../dubbo-samples-concurrency-front}/pom.xml       |  22 +-
 .../dubbo/samples/governance/FrontendConsumer.java | 120 ++++++++++
 .../src/main/resources/log4j.properties            |  20 +-
 .../main/resources/spring/dubbo-demo-consumer.xml  |  14 +-
 .../dubbo-samples-concurrency-middle}/pom.xml      |  22 +-
 .../samples/governance/MiddleEndProvider.java      |   9 +-
 .../governance/impl/AmericanServiceImpl.java       |  68 ++++++
 .../governance/impl/ChineseServiceImpl.java        |  63 ++++++
 .../src/main/resources/log4j.properties            |  20 +-
 .../main/resources/spring/dubbo-demo-provider.xml  |  29 ++-
 .../pom.xml                                        |  13 +-
 .../resources/spring/dubbo-consumer.properties     |   4 +-
 .../resources/spring/dubbo-provider.properties     |   4 +-
 .../java/org/apache/dubbo/samples/ZKTools.java     |  10 +-
 .../apache/dubbo/samples/client/Application.java   |  22 +-
 .../apache/dubbo/samples/server/Application.java   |  37 ++-
 .../samples/externalconfiguration}/ZKTools.java    |  19 +-
 .../consumer/AnnotationConsumer.java               |  13 +-
 .../provider/AnnotationProvider.java               |  27 ++-
 .../spring/MyEnvironmentPostProcessor.java         |   2 +-
 .../pom.xml}                                       |  23 +-
 .../samples/annotation/AnnotationConsumer.java}    |  39 ++--
 .../samples/annotation}/AnnotationProvider.java    |  28 ++-
 .../samples/annotation/EmbeddedZooKeeper.java      | 249 +++++++++++++++++++++
 .../apache/dubbo/samples/annotation}/ZKTools.java  |  15 +-
 .../annotation/action/AnnotationAction.java}       |  22 +-
 .../samples/annotation/api/AnnotationService.java} |  17 +-
 .../annotation/impl/AnnotationServiceImpl.java}    |  21 +-
 .../src/main/resources/log4j.properties}           |  14 +-
 .../resources/spring/dubbo-consumer.properties     |   4 +-
 .../resources/spring/dubbo-provider.properties     |   4 +-
 .../apache/dubbo/samples/configcenter/ZKTools.java |  36 ++-
 .../META-INF/spring/configcenter-consumer.xml      |   2 +-
 .../META-INF/spring/configcenter-provider.xml      |   9 +-
 .../dubbo/samples/configcenter/BasicProvider.java  |   2 +-
 .../apache/dubbo/samples/configcenter/ZKTools.java |  10 +-
 .../META-INF/spring/configcenter-consumer.xml      |   2 +-
 .../META-INF/spring/configcenter-provider.xml      |   4 +-
 dubbo-samples-configcenter/pom.xml                 |   1 +
 .../apache/dubbo/samples/governance/ZKTools.java   |  27 +--
 .../main/resources/spring/dubbo-demo-consumer.xml  |   2 +-
 .../main/resources/spring/dubbo-demo-provider.xml  |   2 +-
 .../dubbo/samples/governance/BasicConsumer.java    |   4 +-
 .../apache/dubbo/samples/governance/ZKTools.java   |  10 +-
 .../main/resources/spring/dubbo-demo-consumer.xml  |   2 +-
 .../main/resources/spring/dubbo-demo-provider.xml  |   2 +-
 .../apache/dubbo/samples/governance/ZKTools.java   |   9 +-
 .../main/resources/spring/dubbo-demo-consumer.xml  |   5 +-
 .../main/resources/spring/dubbo-demo-provider.xml  |   2 -
 .../dubbo/samples/governance/BasicConsumer.java    |   7 +-
 .../apache/dubbo/samples/governance/ZKTools.java   |  12 +-
 .../main/resources/spring/dubbo-demo-consumer.xml  |   2 +-
 .../main/resources/spring/dubbo-demo-provider.xml  |   2 +-
 pom.xml                                            |   5 +
 71 files changed, 1032 insertions(+), 558 deletions(-)

diff --git a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java b/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
index ea1ccf3..c178e30 100644
--- a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
+++ b/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
@@ -21,16 +21,20 @@ package org.apache.dubbo.samples.client;
 import org.apache.dubbo.config.ApplicationConfig;
 import org.apache.dubbo.config.ReferenceConfig;
 import org.apache.dubbo.config.RegistryConfig;
-import org.apache.dubbo.samples.api.GreetingsService;
+import org.apache.dubbo.rpc.service.GenericService;
 
 public class Application {
     public static void main(String[] args) {
-        ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
+        ReferenceConfig<GenericService> reference = new ReferenceConfig<>();
         reference.setApplication(new ApplicationConfig("first-dubbo-client"));
-        reference.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
-        reference.setInterface(GreetingsService.class);
-        GreetingsService greetingsService = reference.get();
-        String message = greetingsService.sayHi("dubbo");
+        reference.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
+//        reference.setInterface(GreetingsService.class);
+        reference.setGeneric(true);
+        reference.setInterface("org.apache.dubbo.samples.api.GreetingsService");
+        GenericService genericService = reference.get();
+
+
+        Object message = genericService.$invoke("sayHi", new String[]{"java.lang.String"}, new Object[]{"aaa"});
         System.out.println(message);
     }
 }
diff --git a/dubbo-samples-configcenter/pom.xml b/dubbo-samples-concurrency/dubbo-samples-concurrency-api/pom.xml
similarity index 62%
copy from dubbo-samples-configcenter/pom.xml
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-api/pom.xml
index 864ceef..8bfa596 100644
--- a/dubbo-samples-configcenter/pom.xml
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-api/pom.xml
@@ -22,36 +22,17 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>dubbo-samples-all</artifactId>
+        <artifactId>dubbo-samples-concurrency</artifactId>
         <groupId>org.apache.dubbo</groupId>
         <version>1.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
-    <packaging>pom</packaging>
 
-    <modules>
-        <module>dubbo-samples-configcenter-xml</module>
-        <module>dubbo-samples-configcenter-multiprotocol</module>
-        <module>dubbo-samples-configcenter-annotation</module>
-        <module>dubbo-samples-configcenter-externalconfiguration</module>
-        <module>dubbo-samples-configcenter-api</module>
-        <!--<module>dubbo-samples-configcenter-springboot</module>-->
-    </modules>
-
-
-    <artifactId>dubbo-samples-configcenter</artifactId>
+    <artifactId>dubbo-samples-concurrency-api</artifactId>
     <dependencies>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-context</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-configcenter-zookeeper</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-metadata-report-api</artifactId>
-        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/ZKTools.java b/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
similarity index 50%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/ZKTools.java
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
index ede7de3..7a6f1ae 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/ZKTools.java
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
@@ -14,12 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.samples.configcenter;
+package org.apache.dubbo.samples.governance;
+
+import org.apache.dubbo.common.utils.StringUtils;
 
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.retry.ExponentialBackoffRetry;
-import org.apache.dubbo.common.utils.StringUtils;
 
 /**
  *
@@ -28,27 +29,27 @@ public class ZKTools {
     private static CuratorFramework client;
 
     public static void main(String[] args) throws Exception {
-        client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", 60 * 1000, 60 * 1000,
-                new ExponentialBackoffRetry(1000, 3));
+        client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", 60 * 1000, 60 * 1000, new ExponentialBackoffRetry(1000, 3));
         client.start();
 
-        generateDubboPropertiesForGlobal();
+//        configuratorsApp();
+        configuratorsAppConsumer();
+
         System.in.read();
-        generateDubboPropertiesForApp();
     }
 
-    public static void generateDubboPropertiesForGlobal() {
-        String str = "dubbo.registry.address=zookeeper://127.0.0.1:2181\n" +
-                "#global config for consumer\n" +
-                "dubbo.consumer.timeout=6000\n" +
-                "#global config for provider\n" +
-                "dubbo.protocol.port=20990\n" +
-                "dubbo.provider.timeout=5000";
+    private void onlineOffline() {
+
+    }
+
+    private static void configuratorsApp() {
+
+        String str = "---\n" + "configVersion: v2.7\n" + "scope: application\n" + "key: concurrency-middle\n" + "enabled: true\n" + "configs:\n" + "- addresses: [\"0.0.0.0:20881\"]\n" + "  side: provider\n" + "  parameters:\n" + "    timeout: 4000";
 
         System.out.println(str);
 
         try {
-            String path = "/dubbo/config/dubbo/dubbo.properties";
+            String path = "/dubbo/config/concurrency-middle/configurators";
             if (client.checkExists().forPath(path) == null) {
                 client.create().creatingParentsIfNeeded().forPath(path);
             }
@@ -58,15 +59,49 @@ public class ZKTools {
         }
     }
 
-    public static void generateDubboPropertiesForApp() {
-        String str = "dubbo.consumer.timeout=6666\n" +
-                "dubbo.application.qos.port=33333\n" +
-                "dubbo.reference.org.apache.dubbo.samples.configcenter.api.DemoService.timeout=9999";
+    private static void configuratorsAppConsumer() {
+        String str = "---\n" + "configVersion: v2.7\n" + "scope: application\n" + "key: concurrency-middle\n" + "enabled: true\n" + "configs:\n" + "- addresses: [\"0.0.0.0\"]\n" + "  side: consumer\n" + "  parameters:\n" + "    timeout: 5000";
+
+        System.out.println(str);
+
+        try {
+            String path = "/dubbo/config/concurrency-middle/configurators";
+            if (client.checkExists().forPath(path) == null) {
+                client.create().creatingParentsIfNeeded().forPath(path);
+            }
+            setData(path, str);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void configuratorsService() {
+        String str = "";
+
+        System.out.println(str);
+
+        try {
+            String path = "/dubbo/config/governance-tagrouter-provider/configurators";
+            if (client.checkExists().forPath(path) == null) {
+                client.create().creatingParentsIfNeeded().forPath(path);
+            }
+            setData(path, str);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void tags() {
+
+    }
+
+    public static void generateAppevelRouter() {
+        String str = "---\n" + "force: false\n" + "runtime: true\n" + "enabled: true\n" + "priority: 1\n" + "key: governance-tagrouter-provider\n" + "tags:\n" + "  - name: tag1\n" + "    addresses: [\"30.5.121.131:20880\"]\n" + "  - name: tag2\n" + "    addresses: [\"30.5.121.131:20881\"]\n" + "...";
 
         System.out.println(str);
 
         try {
-            String path = "/dubbo/config/configcenter-consumer/dubbo.properties";
+            String path = "/dubbo/config/governance-tagrouter-provider/tagrouters";
             if (client.checkExists().forPath(path) == null) {
                 client.create().creatingParentsIfNeeded().forPath(path);
             }
diff --git a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java b/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/AmericanService.java
similarity index 51%
copy from dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/AmericanService.java
index ea1ccf3..ac60277 100644
--- a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/AmericanService.java
@@ -14,23 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.dubbo.samples.governance.api;
 
-package org.apache.dubbo.samples.client;
-
-
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.config.ReferenceConfig;
-import org.apache.dubbo.config.RegistryConfig;
-import org.apache.dubbo.samples.api.GreetingsService;
+/**
+ *
+ */
+public interface AmericanService {
+    String eat();
 
-public class Application {
-    public static void main(String[] args) {
-        ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
-        reference.setApplication(new ApplicationConfig("first-dubbo-client"));
-        reference.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
-        reference.setInterface(GreetingsService.class);
-        GreetingsService greetingsService = reference.get();
-        String message = greetingsService.sayHi("dubbo");
-        System.out.println(message);
-    }
+    String watch();
 }
diff --git a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java b/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/CatService.java
similarity index 51%
copy from dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/CatService.java
index ea1ccf3..3ff7174 100644
--- a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/CatService.java
@@ -14,23 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.dubbo.samples.governance.api;
 
-package org.apache.dubbo.samples.client;
-
+/**
+ *
+ */
+public interface CatService {
+    int getId();
 
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.config.ReferenceConfig;
-import org.apache.dubbo.config.RegistryConfig;
-import org.apache.dubbo.samples.api.GreetingsService;
+    String getName();
 
-public class Application {
-    public static void main(String[] args) {
-        ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
-        reference.setApplication(new ApplicationConfig("first-dubbo-client"));
-        reference.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
-        reference.setInterface(GreetingsService.class);
-        GreetingsService greetingsService = reference.get();
-        String message = greetingsService.sayHi("dubbo");
-        System.out.println(message);
-    }
+    String cat();
 }
diff --git a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java b/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/ChineseService.java
similarity index 51%
copy from dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/ChineseService.java
index ea1ccf3..829548f 100644
--- a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/ChineseService.java
@@ -14,23 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.dubbo.samples.governance.api;
 
-package org.apache.dubbo.samples.client;
-
-
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.config.ReferenceConfig;
-import org.apache.dubbo.config.RegistryConfig;
-import org.apache.dubbo.samples.api.GreetingsService;
+/**
+ *
+ */
+public interface ChineseService {
+    String eat();
 
-public class Application {
-    public static void main(String[] args) {
-        ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
-        reference.setApplication(new ApplicationConfig("first-dubbo-client"));
-        reference.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
-        reference.setInterface(GreetingsService.class);
-        GreetingsService greetingsService = reference.get();
-        String message = greetingsService.sayHi("dubbo");
-        System.out.println(message);
-    }
+    String watch();
 }
diff --git a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java b/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/DogService.java
similarity index 51%
copy from dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/DogService.java
index ea1ccf3..a2360d6 100644
--- a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/DogService.java
@@ -14,23 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.dubbo.samples.governance.api;
 
-package org.apache.dubbo.samples.client;
-
+/**
+ *
+ */
+public interface DogService {
+    int getId();
 
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.config.ReferenceConfig;
-import org.apache.dubbo.config.RegistryConfig;
-import org.apache.dubbo.samples.api.GreetingsService;
+    String getName();
 
-public class Application {
-    public static void main(String[] args) {
-        ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
-        reference.setApplication(new ApplicationConfig("first-dubbo-client"));
-        reference.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
-        reference.setInterface(GreetingsService.class);
-        GreetingsService greetingsService = reference.get();
-        String message = greetingsService.sayHi("dubbo");
-        System.out.println(message);
-    }
+    String dog();
 }
diff --git a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java b/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/LionService.java
similarity index 51%
copy from dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/LionService.java
index ea1ccf3..bb54048 100644
--- a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/LionService.java
@@ -14,23 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.dubbo.samples.governance.api;
 
-package org.apache.dubbo.samples.client;
-
+/**
+ *
+ */
+public interface LionService {
+    int getId();
 
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.config.ReferenceConfig;
-import org.apache.dubbo.config.RegistryConfig;
-import org.apache.dubbo.samples.api.GreetingsService;
+    String getName();
 
-public class Application {
-    public static void main(String[] args) {
-        ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
-        reference.setApplication(new ApplicationConfig("first-dubbo-client"));
-        reference.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
-        reference.setInterface(GreetingsService.class);
-        GreetingsService greetingsService = reference.get();
-        String message = greetingsService.sayHi("dubbo");
-        System.out.println(message);
-    }
+    String lion();
 }
diff --git a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java b/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/TigerService.java
similarity index 51%
copy from dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/TigerService.java
index ea1ccf3..98b60a0 100644
--- a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/TigerService.java
@@ -14,23 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.dubbo.samples.governance.api;
 
-package org.apache.dubbo.samples.client;
-
+/**
+ *
+ */
+public interface TigerService {
+    int getId();
 
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.config.ReferenceConfig;
-import org.apache.dubbo.config.RegistryConfig;
-import org.apache.dubbo.samples.api.GreetingsService;
+    String getName();
 
-public class Application {
-    public static void main(String[] args) {
-        ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
-        reference.setApplication(new ApplicationConfig("first-dubbo-client"));
-        reference.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
-        reference.setInterface(GreetingsService.class);
-        GreetingsService greetingsService = reference.get();
-        String message = greetingsService.sayHi("dubbo");
-        System.out.println(message);
-    }
+    String tiger();
 }
diff --git a/dubbo-samples-configcenter/pom.xml b/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/pom.xml
similarity index 66%
copy from dubbo-samples-configcenter/pom.xml
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-backend/pom.xml
index 864ceef..2f3a749 100644
--- a/dubbo-samples-configcenter/pom.xml
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/pom.xml
@@ -22,24 +22,13 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>dubbo-samples-all</artifactId>
+        <artifactId>dubbo-samples-concurrency</artifactId>
         <groupId>org.apache.dubbo</groupId>
         <version>1.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
-    <packaging>pom</packaging>
 
-    <modules>
-        <module>dubbo-samples-configcenter-xml</module>
-        <module>dubbo-samples-configcenter-multiprotocol</module>
-        <module>dubbo-samples-configcenter-annotation</module>
-        <module>dubbo-samples-configcenter-externalconfiguration</module>
-        <module>dubbo-samples-configcenter-api</module>
-        <!--<module>dubbo-samples-configcenter-springboot</module>-->
-    </modules>
-
-
-    <artifactId>dubbo-samples-configcenter</artifactId>
+    <artifactId>dubbo-samples-concurrency-backend</artifactId>
     <dependencies>
         <dependency>
             <groupId>org.springframework</groupId>
@@ -47,11 +36,8 @@
         </dependency>
         <dependency>
             <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-configcenter-zookeeper</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-metadata-report-api</artifactId>
+            <artifactId>dubbo-samples-concurrency-api</artifactId>
+            <version>${project.version}</version>
         </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java b/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/BackendProvider.java
similarity index 84%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/BackendProvider.java
index 08fbfde..6b34e93 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/BackendProvider.java
@@ -17,15 +17,15 @@
  *
  */
 
-package org.apache.dubbo.samples.configcenter;
+package org.apache.dubbo.samples.governance;
 
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-public class BasicProvider {
+public class BackendProvider {
 
     public static void main(String[] args) throws Exception {
-        new EmbeddedZooKeeper(2181, false).start();
-        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/configcenter-provider.xml"});
+//        new EmbeddedZooKeeper(2181, false).start();
+        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"spring/dubbo-demo-provider.xml"});
         context.start();
 
         System.in.read(); // press any key to exit
diff --git a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java b/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/CatServiceImpl.java
similarity index 51%
copy from dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/CatServiceImpl.java
index ea1ccf3..9e4aa57 100644
--- a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/CatServiceImpl.java
@@ -14,23 +14,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.dubbo.samples.governance.impl;
 
-package org.apache.dubbo.samples.client;
+import org.apache.dubbo.samples.governance.api.CatService;
 
+/**
+ *
+ */
+public class CatServiceImpl implements CatService {
+    @Override
+    public int getId() {
+        return 1;
+    }
 
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.config.ReferenceConfig;
-import org.apache.dubbo.config.RegistryConfig;
-import org.apache.dubbo.samples.api.GreetingsService;
+    @Override
+    public String getName() {
+        return "I am a Cat!";
+    }
 
-public class Application {
-    public static void main(String[] args) {
-        ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
-        reference.setApplication(new ApplicationConfig("first-dubbo-client"));
-        reference.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
-        reference.setInterface(GreetingsService.class);
-        GreetingsService greetingsService = reference.get();
-        String message = greetingsService.sayHi("dubbo");
-        System.out.println(message);
+    @Override
+    public String cat() {
+        return "Meow Meow!";
     }
 }
diff --git a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java b/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/DogServiceImpl.java
similarity index 51%
copy from dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/DogServiceImpl.java
index ea1ccf3..91c6ab2 100644
--- a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/DogServiceImpl.java
@@ -14,23 +14,31 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.dubbo.samples.governance.impl;
 
-package org.apache.dubbo.samples.client;
+import org.apache.dubbo.samples.governance.api.DogService;
 
+/**
+ *
+ */
+public class DogServiceImpl implements DogService {
+    @Override
+    public int getId() {
+        return 0;
+    }
 
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.config.ReferenceConfig;
-import org.apache.dubbo.config.RegistryConfig;
-import org.apache.dubbo.samples.api.GreetingsService;
+    @Override
+    public String getName() {
+        try {
+            Thread.sleep(2000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        return "I am a Dog!";
+    }
 
-public class Application {
-    public static void main(String[] args) {
-        ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
-        reference.setApplication(new ApplicationConfig("first-dubbo-client"));
-        reference.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
-        reference.setInterface(GreetingsService.class);
-        GreetingsService greetingsService = reference.get();
-        String message = greetingsService.sayHi("dubbo");
-        System.out.println(message);
+    @Override
+    public String dog() {
+        return "Woof Woof!";
     }
 }
diff --git a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java b/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/LionServiceImpl.java
similarity index 51%
copy from dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/LionServiceImpl.java
index ea1ccf3..a2046fa 100644
--- a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/LionServiceImpl.java
@@ -14,23 +14,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.dubbo.samples.governance.impl;
 
-package org.apache.dubbo.samples.client;
+import org.apache.dubbo.samples.governance.api.LionService;
 
+/**
+ *
+ */
+public class LionServiceImpl implements LionService {
+    @Override
+    public int getId() {
+        return 2;
+    }
 
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.config.ReferenceConfig;
-import org.apache.dubbo.config.RegistryConfig;
-import org.apache.dubbo.samples.api.GreetingsService;
+    @Override
+    public String getName() {
+        return "I am a Lion!";
+    }
 
-public class Application {
-    public static void main(String[] args) {
-        ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
-        reference.setApplication(new ApplicationConfig("first-dubbo-client"));
-        reference.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
-        reference.setInterface(GreetingsService.class);
-        GreetingsService greetingsService = reference.get();
-        String message = greetingsService.sayHi("dubbo");
-        System.out.println(message);
+    @Override
+    public String lion() {
+        return "Lion Lion!";
     }
 }
diff --git a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java b/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/TigerServiceImpl.java
similarity index 51%
copy from dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/TigerServiceImpl.java
index ea1ccf3..40b71cd 100644
--- a/dubbo-samples-api/src/main/java/org/apache/dubbo/samples/client/Application.java
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/TigerServiceImpl.java
@@ -14,23 +14,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.dubbo.samples.governance.impl;
 
-package org.apache.dubbo.samples.client;
+import org.apache.dubbo.samples.governance.api.TigerService;
 
+/**
+ *
+ */
+public class TigerServiceImpl implements TigerService {
+    @Override
+    public int getId() {
+        return 3;
+    }
 
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.config.ReferenceConfig;
-import org.apache.dubbo.config.RegistryConfig;
-import org.apache.dubbo.samples.api.GreetingsService;
+    @Override
+    public String getName() {
+        return "I am a Tiger!";
+    }
 
-public class Application {
-    public static void main(String[] args) {
-        ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
-        reference.setApplication(new ApplicationConfig("first-dubbo-client"));
-        reference.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
-        reference.setInterface(GreetingsService.class);
-        GreetingsService greetingsService = reference.get();
-        String message = greetingsService.sayHi("dubbo");
-        System.out.println(message);
+    @Override
+    public String tiger() {
+        return "Tiger Tiger!";
     }
 }
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties b/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/resources/log4j.properties
similarity index 64%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/resources/log4j.properties
index 4054da2..f30fda0 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/resources/log4j.properties
@@ -6,20 +6,20 @@
 #   The ASF licenses this file to You under the Apache License, Version 2.0
 #   (the "License"); you may not use this file except in compliance with
 #   the License.  You may obtain a copy of the License at
-#  
+#
 #       http://www.apache.org/licenses/LICENSE-2.0
-#  
+#
 #   Unless required by applicable law or agreed to in writing, software
 #   distributed under the License is distributed on an "AS IS" BASIS,
 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 #   See the License for the specific language governing permissions and
 #   limitations under the License.
-#  
 #
-dubbo.application.name=configcenter-annotation-provider
-dubbo.configcenter.address=zookeeper://127.0.0.1:2181
-dubbo.configcenter.configfile=dubbo.properties
-# The common part, for example registry, protocol can be stored under the global group in ConfigCenter
-#dubbo.registry.address=zookeeper://127.0.0.1:2181
-# The application specific part, can be stored under the app group in the ConfigCenter
-#dubbo.consumer.timeout=3000
\ No newline at end of file
+#
+###set log levels###
+log4j.rootLogger=info, stdout
+###output to the console###
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n
\ No newline at end of file
diff --git a/dubbo-samples-governance/dubbo-samples-tagrouter/src/main/resources/spring/dubbo-demo-provider.xml b/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/resources/spring/dubbo-demo-provider.xml
similarity index 68%
copy from dubbo-samples-governance/dubbo-samples-tagrouter/src/main/resources/spring/dubbo-demo-provider.xml
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/resources/spring/dubbo-demo-provider.xml
index eb6fc71..a91c98c 100644
--- a/dubbo-samples-governance/dubbo-samples-tagrouter/src/main/resources/spring/dubbo-demo-provider.xml
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/resources/spring/dubbo-demo-provider.xml
@@ -25,7 +25,7 @@
        http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
 
     <!-- optional provider's application name, used for tracing dependency relationship -->
-    <dubbo:application name="governance-tagrouter-provider"/>
+    <dubbo:application name="concurrency-backend"/>
 
     <!-- optional -->
     <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
@@ -33,16 +33,18 @@
     <!--optional, use dubbo protocol to export service on port 20880 -->
     <dubbo:protocol name="dubbo" port="-1"/>
 
-    <dubbo:configcenter address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:config-center enable="false" address="zookeeper://127.0.0.1:2181"/>
 
-    <!-- service implementation, as same as regular local bean -->
-    <bean id="demoService" class="org.apache.dubbo.samples.governance.impl.DemoServiceImpl"/>
-    <!-- declare the service interface to be exported -->
-    <dubbo:service interface="org.apache.dubbo.samples.governance.api.DemoService" ref="demoService"/>
+    <bean id="catService" class="org.apache.dubbo.samples.governance.impl.CatServiceImpl"/>
+    <dubbo:service interface="org.apache.dubbo.samples.governance.api.CatService" ref="catService"/>
 
-    <!-- service implementation, as same as regular local bean -->
-    <bean id="demoService2" class="org.apache.dubbo.samples.governance.impl.DemoServiceImpl2"/>
-    <!-- declare the service interface to be exported -->
-    <dubbo:service interface="org.apache.dubbo.samples.governance.api.DemoService2" ref="demoService2"/>
+    <bean id="dogService" class="org.apache.dubbo.samples.governance.impl.DogServiceImpl"/>
+    <dubbo:service interface="org.apache.dubbo.samples.governance.api.DogService" ref="dogService"/>
+
+    <bean id="lionService" class="org.apache.dubbo.samples.governance.impl.LionServiceImpl"/>
+    <dubbo:service interface="org.apache.dubbo.samples.governance.api.LionService" ref="lionService"/>
+
+    <bean id="tigerService" class="org.apache.dubbo.samples.governance.impl.TigerServiceImpl"/>
+    <dubbo:service interface="org.apache.dubbo.samples.governance.api.TigerService" ref="tigerService"/>
 
 </beans>
\ No newline at end of file
diff --git a/dubbo-samples-configcenter/pom.xml b/dubbo-samples-concurrency/dubbo-samples-concurrency-front/pom.xml
similarity index 66%
copy from dubbo-samples-configcenter/pom.xml
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-front/pom.xml
index 864ceef..9d5b9f7 100644
--- a/dubbo-samples-configcenter/pom.xml
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-front/pom.xml
@@ -22,24 +22,13 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>dubbo-samples-all</artifactId>
+        <artifactId>dubbo-samples-concurrency</artifactId>
         <groupId>org.apache.dubbo</groupId>
         <version>1.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
-    <packaging>pom</packaging>
 
-    <modules>
-        <module>dubbo-samples-configcenter-xml</module>
-        <module>dubbo-samples-configcenter-multiprotocol</module>
-        <module>dubbo-samples-configcenter-annotation</module>
-        <module>dubbo-samples-configcenter-externalconfiguration</module>
-        <module>dubbo-samples-configcenter-api</module>
-        <!--<module>dubbo-samples-configcenter-springboot</module>-->
-    </modules>
-
-
-    <artifactId>dubbo-samples-configcenter</artifactId>
+    <artifactId>dubbo-samples-concurrency-front</artifactId>
     <dependencies>
         <dependency>
             <groupId>org.springframework</groupId>
@@ -47,11 +36,8 @@
         </dependency>
         <dependency>
             <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-configcenter-zookeeper</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-metadata-report-api</artifactId>
+            <artifactId>dubbo-samples-concurrency-api</artifactId>
+            <version>${project.version}</version>
         </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-front/src/main/java/org/apache/dubbo/samples/governance/FrontendConsumer.java b/dubbo-samples-concurrency/dubbo-samples-concurrency-front/src/main/java/org/apache/dubbo/samples/governance/FrontendConsumer.java
new file mode 100644
index 0000000..fb614d2
--- /dev/null
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-front/src/main/java/org/apache/dubbo/samples/governance/FrontendConsumer.java
@@ -0,0 +1,120 @@
+/*
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements.  See the NOTICE file distributed with
+ *   this work for additional information regarding copyright ownership.
+ *   The ASF licenses this file to You under the Apache License, Version 2.0
+ *   (the "License"); you may not use this file except in compliance with
+ *   the License.  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+package org.apache.dubbo.samples.governance;
+
+import org.apache.dubbo.samples.governance.api.AmericanService;
+import org.apache.dubbo.samples.governance.api.CatService;
+import org.apache.dubbo.samples.governance.api.ChineseService;
+import org.apache.dubbo.samples.governance.api.DogService;
+import org.apache.dubbo.samples.governance.api.LionService;
+import org.apache.dubbo.samples.governance.api.TigerService;
+
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+public class FrontendConsumer {
+
+    private static ExecutorService executorService = Executors.newFixedThreadPool(3);
+
+    private static long interval = 5000;
+
+    public static void main(String[] args) {
+        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"spring/dubbo-demo-consumer.xml"});
+        context.start();
+
+        while (true) {
+            try {
+//                cat(context);
+                dog(context);
+//                tiger(context);
+//                lion(context);
+                chinese(context);
+                american(context);
+            } catch (Throwable throwable) {
+                throwable.printStackTrace();
+            }
+        }
+
+    }
+
+    public static void cat(ClassPathXmlApplicationContext context) {
+        executorService.submit(() -> {
+            while (true) {
+                CatService catService = (CatService) context.getBean("catService");
+                System.out.println(catService.cat());
+                Thread.sleep(interval);
+            }
+        });
+    }
+
+    public static void dog(ClassPathXmlApplicationContext context) {
+        executorService.submit(() -> {
+            while (true) {
+                DogService dogService = (DogService) context.getBean("dogService");
+                System.out.println(dogService.dog());
+                Thread.sleep(interval);
+            }
+        });
+    }
+
+    public static void lion(ClassPathXmlApplicationContext context) {
+        executorService.submit(() -> {
+            while (true) {
+                LionService lionService = (LionService) context.getBean("lionService");
+                System.out.println(lionService.lion());
+                Thread.sleep(interval);
+            }
+        });
+    }
+
+    public static void tiger(ClassPathXmlApplicationContext context) {
+        executorService.submit(() -> {
+            while (true) {
+                TigerService tigerService = (TigerService) context.getBean("tigerService");
+                System.out.println(tigerService.tiger());
+                Thread.sleep(interval);
+            }
+        });
+    }
+
+    public static void chinese(ClassPathXmlApplicationContext context) {
+        executorService.submit(() -> {
+            while (true) {
+                ChineseService chineseService = (ChineseService) context.getBean("chineseService");
+                System.out.println(chineseService.eat());
+                Thread.sleep(interval);
+            }
+        });
+    }
+
+    public static void american(ClassPathXmlApplicationContext context) {
+        executorService.submit(() -> {
+            while (true) {
+                AmericanService americanService = (AmericanService) context.getBean("americanService");
+                System.out.println(americanService.eat());
+                Thread.sleep(interval);
+            }
+        });
+    }
+
+
+}
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties b/dubbo-samples-concurrency/dubbo-samples-concurrency-front/src/main/resources/log4j.properties
similarity index 64%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-front/src/main/resources/log4j.properties
index 4054da2..f30fda0 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-front/src/main/resources/log4j.properties
@@ -6,20 +6,20 @@
 #   The ASF licenses this file to You under the Apache License, Version 2.0
 #   (the "License"); you may not use this file except in compliance with
 #   the License.  You may obtain a copy of the License at
-#  
+#
 #       http://www.apache.org/licenses/LICENSE-2.0
-#  
+#
 #   Unless required by applicable law or agreed to in writing, software
 #   distributed under the License is distributed on an "AS IS" BASIS,
 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 #   See the License for the specific language governing permissions and
 #   limitations under the License.
-#  
 #
-dubbo.application.name=configcenter-annotation-provider
-dubbo.configcenter.address=zookeeper://127.0.0.1:2181
-dubbo.configcenter.configfile=dubbo.properties
-# The common part, for example registry, protocol can be stored under the global group in ConfigCenter
-#dubbo.registry.address=zookeeper://127.0.0.1:2181
-# The application specific part, can be stored under the app group in the ConfigCenter
-#dubbo.consumer.timeout=3000
\ No newline at end of file
+#
+###set log levels###
+log4j.rootLogger=info, stdout
+###output to the console###
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n
\ No newline at end of file
diff --git a/dubbo-samples-governance/dubbo-samples-applevel-override/src/main/resources/spring/dubbo-demo-consumer.xml b/dubbo-samples-concurrency/dubbo-samples-concurrency-front/src/main/resources/spring/dubbo-demo-consumer.xml
similarity index 65%
copy from dubbo-samples-governance/dubbo-samples-applevel-override/src/main/resources/spring/dubbo-demo-consumer.xml
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-front/src/main/resources/spring/dubbo-demo-consumer.xml
index 83834c6..fdcecdb 100644
--- a/dubbo-samples-governance/dubbo-samples-applevel-override/src/main/resources/spring/dubbo-demo-consumer.xml
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-front/src/main/resources/spring/dubbo-demo-consumer.xml
@@ -26,16 +26,22 @@
 
     <!-- optional, consumer's application name, used for tracing dependency relationship (not a matching criterion),
     don't set it same as provider -->
-    <dubbo:application name="governance-appoverride-consumer"/>
+    <dubbo:application name="concurrency-front"/>
 
     <!-- optional, use multicast registry center to discover service -->
     <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
 
-    <dubbo:configcenter priority="false" address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:config-center enable="false" address="zookeeper://127.0.0.1:2181"/>
 
     <!-- generate proxy for the remote service, then demoService can be used in the same way as the
     local regular interface -->
-    <dubbo:reference id="demoService" check="false" interface="org.apache.dubbo.samples.governance.api.DemoService"/>
-    <dubbo:reference id="demoService2" check="false" interface="org.apache.dubbo.samples.governance.api.DemoService2"/>
+    <dubbo:reference id="catService" check="false" interface="org.apache.dubbo.samples.governance.api.CatService"/>
+    <dubbo:reference id="dogService" check="false" interface="org.apache.dubbo.samples.governance.api.DogService"/>
+    <dubbo:reference id="lionService" check="false" interface="org.apache.dubbo.samples.governance.api.LionService"/>
+    <dubbo:reference id="tigerService" check="false" interface="org.apache.dubbo.samples.governance.api.TigerService"/>
+    <dubbo:reference id="chineseService" check="false"
+                     interface="org.apache.dubbo.samples.governance.api.ChineseService"/>
+    <dubbo:reference id="americanService" check="false"
+                     interface="org.apache.dubbo.samples.governance.api.AmericanService"/>
 
 </beans>
\ No newline at end of file
diff --git a/dubbo-samples-configcenter/pom.xml b/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/pom.xml
similarity index 66%
copy from dubbo-samples-configcenter/pom.xml
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-middle/pom.xml
index 864ceef..58dd3c9 100644
--- a/dubbo-samples-configcenter/pom.xml
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/pom.xml
@@ -22,24 +22,13 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>dubbo-samples-all</artifactId>
+        <artifactId>dubbo-samples-concurrency</artifactId>
         <groupId>org.apache.dubbo</groupId>
         <version>1.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
-    <packaging>pom</packaging>
 
-    <modules>
-        <module>dubbo-samples-configcenter-xml</module>
-        <module>dubbo-samples-configcenter-multiprotocol</module>
-        <module>dubbo-samples-configcenter-annotation</module>
-        <module>dubbo-samples-configcenter-externalconfiguration</module>
-        <module>dubbo-samples-configcenter-api</module>
-        <!--<module>dubbo-samples-configcenter-springboot</module>-->
-    </modules>
-
-
-    <artifactId>dubbo-samples-configcenter</artifactId>
+    <artifactId>dubbo-samples-concurrency-middle</artifactId>
     <dependencies>
         <dependency>
             <groupId>org.springframework</groupId>
@@ -47,11 +36,8 @@
         </dependency>
         <dependency>
             <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-configcenter-zookeeper</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-metadata-report-api</artifactId>
+            <artifactId>dubbo-samples-concurrency-api</artifactId>
+            <version>${project.version}</version>
         </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java b/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/java/org/apache/dubbo/samples/governance/MiddleEndProvider.java
similarity index 84%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/java/org/apache/dubbo/samples/governance/MiddleEndProvider.java
index 08fbfde..b45c895 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/java/org/apache/dubbo/samples/governance/MiddleEndProvider.java
@@ -17,18 +17,19 @@
  *
  */
 
-package org.apache.dubbo.samples.configcenter;
+package org.apache.dubbo.samples.governance;
 
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-public class BasicProvider {
+public class MiddleEndProvider {
 
     public static void main(String[] args) throws Exception {
-        new EmbeddedZooKeeper(2181, false).start();
-        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/configcenter-provider.xml"});
+//        new EmbeddedZooKeeper(2181, false).start();
+        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"spring/dubbo-demo-provider.xml"});
         context.start();
 
         System.in.read(); // press any key to exit
     }
 
+
 }
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/java/org/apache/dubbo/samples/governance/impl/AmericanServiceImpl.java b/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/java/org/apache/dubbo/samples/governance/impl/AmericanServiceImpl.java
new file mode 100644
index 0000000..ac220d7
--- /dev/null
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/java/org/apache/dubbo/samples/governance/impl/AmericanServiceImpl.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.samples.governance.impl;
+
+import org.apache.dubbo.samples.governance.api.AmericanService;
+import org.apache.dubbo.samples.governance.api.CatService;
+import org.apache.dubbo.samples.governance.api.LionService;
+
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ *
+ */
+public class AmericanServiceImpl implements AmericanService {
+
+    @Autowired
+    private CatService catService;
+
+    @Autowired
+    private LionService lionService;
+
+    @Override
+    public String eat() {
+        try {
+            Thread.sleep(2000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        System.out.println(catService.getName());
+        return "I can eat Cat!";
+    }
+
+    @Override
+    public String watch() {
+        System.out.println(lionService.getName());
+        return "I want to see Lion!";
+    }
+
+    public CatService getCatService() {
+        return catService;
+    }
+
+    public void setCatService(CatService catService) {
+        this.catService = catService;
+    }
+
+    public LionService getLionService() {
+        return lionService;
+    }
+
+    public void setLionService(LionService lionService) {
+        this.lionService = lionService;
+    }
+}
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/java/org/apache/dubbo/samples/governance/impl/ChineseServiceImpl.java b/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/java/org/apache/dubbo/samples/governance/impl/ChineseServiceImpl.java
new file mode 100644
index 0000000..f6c6897
--- /dev/null
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/java/org/apache/dubbo/samples/governance/impl/ChineseServiceImpl.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.samples.governance.impl;
+
+import org.apache.dubbo.samples.governance.api.ChineseService;
+import org.apache.dubbo.samples.governance.api.DogService;
+import org.apache.dubbo.samples.governance.api.TigerService;
+
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ *
+ */
+public class ChineseServiceImpl implements ChineseService {
+
+    @Autowired
+    private DogService dogService;
+
+    @Autowired
+    private TigerService tigerService;
+
+    @Override
+    public String eat() {
+        System.out.println(dogService.getName());
+        return "I can eat Dog!";
+    }
+
+    @Override
+    public String watch() {
+        System.out.println(tigerService.getName());
+        return "I want to see Tiger!";
+    }
+
+    public DogService getDogService() {
+        return dogService;
+    }
+
+    public void setDogService(DogService dogService) {
+        this.dogService = dogService;
+    }
+
+    public TigerService getTigerService() {
+        return tigerService;
+    }
+
+    public void setTigerService(TigerService tigerService) {
+        this.tigerService = tigerService;
+    }
+}
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties b/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/resources/log4j.properties
similarity index 64%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/resources/log4j.properties
index 4054da2..f30fda0 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/resources/log4j.properties
@@ -6,20 +6,20 @@
 #   The ASF licenses this file to You under the Apache License, Version 2.0
 #   (the "License"); you may not use this file except in compliance with
 #   the License.  You may obtain a copy of the License at
-#  
+#
 #       http://www.apache.org/licenses/LICENSE-2.0
-#  
+#
 #   Unless required by applicable law or agreed to in writing, software
 #   distributed under the License is distributed on an "AS IS" BASIS,
 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 #   See the License for the specific language governing permissions and
 #   limitations under the License.
-#  
 #
-dubbo.application.name=configcenter-annotation-provider
-dubbo.configcenter.address=zookeeper://127.0.0.1:2181
-dubbo.configcenter.configfile=dubbo.properties
-# The common part, for example registry, protocol can be stored under the global group in ConfigCenter
-#dubbo.registry.address=zookeeper://127.0.0.1:2181
-# The application specific part, can be stored under the app group in the ConfigCenter
-#dubbo.consumer.timeout=3000
\ No newline at end of file
+#
+###set log levels###
+log4j.rootLogger=info, stdout
+###output to the console###
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n
\ No newline at end of file
diff --git a/dubbo-samples-governance/dubbo-samples-applevel-override/src/main/resources/spring/dubbo-demo-provider.xml b/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/resources/spring/dubbo-demo-provider.xml
similarity index 54%
copy from dubbo-samples-governance/dubbo-samples-applevel-override/src/main/resources/spring/dubbo-demo-provider.xml
copy to dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/resources/spring/dubbo-demo-provider.xml
index 90245df..135405b 100644
--- a/dubbo-samples-governance/dubbo-samples-applevel-override/src/main/resources/spring/dubbo-demo-provider.xml
+++ b/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/resources/spring/dubbo-demo-provider.xml
@@ -20,12 +20,14 @@
 
 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
-       xmlns="http://www.springframework.org/schema/beans"
+       xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
+       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
+
+    <context:component-scan base-package="org.apache.dubbo.samples.governance.impl"/>
 
     <!-- optional provider's application name, used for tracing dependency relationship -->
-    <dubbo:application name="governance-appoverride-provider"/>
+    <dubbo:application name="concurrency-middle"/>
 
     <!-- optional -->
     <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
@@ -33,16 +35,19 @@
     <!--optional, use dubbo protocol to export service on port 20880 -->
     <dubbo:protocol name="dubbo" port="-1"/>
 
-    <dubbo:configcenter priority="false" address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:config-center enable="false" address="zookeeper://127.0.0.1:2181"/>
+
+    <!-- generate proxy for the remote service, then demoService can be used in the same way as the
+    local regular interface -->
+    <dubbo:reference id="catService" check="false" interface="org.apache.dubbo.samples.governance.api.CatService"/>
+    <dubbo:reference id="dogService" check="false" interface="org.apache.dubbo.samples.governance.api.DogService"/>
+    <dubbo:reference id="lionService" check="false" interface="org.apache.dubbo.samples.governance.api.LionService"/>
+    <dubbo:reference id="tigerService" check="false" interface="org.apache.dubbo.samples.governance.api.TigerService"/>
 
-    <!-- service implementation, as same as regular local bean -->
-    <bean id="demoService" class="org.apache.dubbo.samples.governance.impl.DemoServiceImpl"/>
-    <!-- declare the service interface to be exported -->
-    <dubbo:service interface="org.apache.dubbo.samples.governance.api.DemoService" ref="demoService"/>
+    <bean id="chineseService" class="org.apache.dubbo.samples.governance.impl.ChineseServiceImpl"/>
+    <dubbo:service interface="org.apache.dubbo.samples.governance.api.ChineseService" ref="chineseService"/>
 
-    <!-- service implementation, as same as regular local bean -->
-    <bean id="demoService2" class="org.apache.dubbo.samples.governance.impl.DemoServiceImpl2"/>
-    <!-- declare the service interface to be exported -->
-    <dubbo:service interface="org.apache.dubbo.samples.governance.api.DemoService2" ref="demoService2"/>
+    <bean id="americanService" class="org.apache.dubbo.samples.governance.impl.AmericanServiceImpl"/>
+    <dubbo:service interface="org.apache.dubbo.samples.governance.api.AmericanService" ref="americanService"/>
 
 </beans>
\ No newline at end of file
diff --git a/dubbo-samples-configcenter/pom.xml b/dubbo-samples-concurrency/pom.xml
similarity index 80%
copy from dubbo-samples-configcenter/pom.xml
copy to dubbo-samples-concurrency/pom.xml
index 864ceef..d735351 100644
--- a/dubbo-samples-configcenter/pom.xml
+++ b/dubbo-samples-concurrency/pom.xml
@@ -28,18 +28,15 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <packaging>pom</packaging>
+    <artifactId>dubbo-samples-concurrency</artifactId>
 
     <modules>
-        <module>dubbo-samples-configcenter-xml</module>
-        <module>dubbo-samples-configcenter-multiprotocol</module>
-        <module>dubbo-samples-configcenter-annotation</module>
-        <module>dubbo-samples-configcenter-externalconfiguration</module>
-        <module>dubbo-samples-configcenter-api</module>
-        <!--<module>dubbo-samples-configcenter-springboot</module>-->
+        <module>dubbo-samples-concurrency-api</module>
+        <module>dubbo-samples-concurrency-front</module>
+        <module>dubbo-samples-concurrency-middle</module>
+        <module>dubbo-samples-concurrency-backend</module>
     </modules>
 
-
-    <artifactId>dubbo-samples-configcenter</artifactId>
     <dependencies>
         <dependency>
             <groupId>org.springframework</groupId>
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties b/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties
index 4054da2..fa5da7e 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties
@@ -17,8 +17,8 @@
 #  
 #
 dubbo.application.name=configcenter-annotation-provider
-dubbo.configcenter.address=zookeeper://127.0.0.1:2181
-dubbo.configcenter.configfile=dubbo.properties
+dubbo.config-center.address=zookeeper://127.0.0.1:2181
+dubbo.config-center.configfile=dubbo.properties
 # The common part, for example registry, protocol can be stored under the global group in ConfigCenter
 #dubbo.registry.address=zookeeper://127.0.0.1:2181
 # The application specific part, can be stored under the app group in the ConfigCenter
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-provider.properties b/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-provider.properties
index 976b1c4..bb7d957 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-provider.properties
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-provider.properties
@@ -17,8 +17,8 @@
 #  
 #
 dubbo.application.name=configcenter-annotation-provider
-dubbo.configcenter.address=zookeeper://127.0.0.1:2181
-dubbo.configcenter.configfile=dubbo.properties
+dubbo.config-center.address=zookeeper://127.0.0.1:2181
+dubbo.config-center.configfile=dubbo.properties
 # The common part, for example registry, protocol can be stored under the global group in ConfigCenter
 # The application specific part, can be stored under the app group in the ConfigCenter
 #dubbo.registry.address=zookeeper://127.0.0.1:2181
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/ZKTools.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/ZKTools.java
index 4714fc4..b2ffb1e 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/ZKTools.java
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/ZKTools.java
@@ -16,10 +16,11 @@
  */
 package org.apache.dubbo.samples;
 
+import org.apache.dubbo.common.utils.StringUtils;
+
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.retry.ExponentialBackoffRetry;
-import org.apache.dubbo.common.utils.StringUtils;
 
 /**
  *
@@ -36,12 +37,7 @@ public class ZKTools {
     }
 
     public static void generateDubboPropertiesForGlobal() {
-        String str = "dubbo.registry.address=zookeeper://127.0.0.1:2181\n" +
-                "#global config for consumer\n" +
-                "dubbo.consumer.timeout=6000\n" +
-                "#global config for provider\n" +
-                "dubbo.protocol.port=20990\n" +
-                "dubbo.provider.timeout=5000";
+        String str = "dubbo.registry.address=zookeeper://127.0.0.1:2181\n";
 
         System.out.println(str);
 
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/client/Application.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/client/Application.java
index 5b878d6..7da966c 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/client/Application.java
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/client/Application.java
@@ -25,26 +25,20 @@ import org.apache.dubbo.samples.api.GreetingsService;
 
 public class Application {
     public static void main(String[] args) throws Exception {
-        // Enable Config Center.
-        ConfigCenterConfig configCenter = new ConfigCenterConfig();
-        configCenter.setAddress("zookeeper://127.0.0.1:2181");
-        configCenter.init();
-
-        // If you don't want to use ConfigCenter provided by dubbo, you can set external configuration to Dubbo directly.
-        // We created a Map instance manually and put a value into it, but in reality, the external configurations will most likely being generated from other plugins in your system.
-        /*Map<String, String> dubboConfigurations = new HashMap<>();
-        dubboConfigurations.put("dubbo.registry.address", "zookeeper://127.0.0.1:2181");
-        // you will need to add the configcenter address if you want to use the service governance features in 2.7, e.g., overrides and routers.
-        // but notice it will not be used for getting startup configurations.
-        dubboConfigurations.put("dubbo.configcenter.address", "zookeeper://127.0.0.1:2181");
-        Environment.getInstance().updateExternalConfigurationMap(dubboConfigurations);*/
+        loadConfigByDubbo();
 
         ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
         reference.setApplication(new ApplicationConfig("first-dubbo-client"));
-//        reference.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
         reference.setInterface(GreetingsService.class);
         GreetingsService greetingsService = reference.get();
         String message = greetingsService.sayHi("dubbo");
         System.out.println(message);
     }
+
+    public static void loadConfigByDubbo() {
+        // Enable Config Center.
+        ConfigCenterConfig configCenter = new ConfigCenterConfig();
+        configCenter.setAddress("zookeeper://127.0.0.1:2181");
+        configCenter.init();
+    }
 }
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/server/Application.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/server/Application.java
index 53b10a8..1ad614d 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/server/Application.java
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/server/Application.java
@@ -18,7 +18,6 @@
 package org.apache.dubbo.samples.server;
 
 
-import org.apache.dubbo.common.config.Environment;
 import org.apache.dubbo.config.ApplicationConfig;
 import org.apache.dubbo.config.ConfigCenterConfig;
 import org.apache.dubbo.config.ServiceConfig;
@@ -29,31 +28,31 @@ import java.util.Map;
 
 public class Application {
     public static void main(String[] args) throws Exception {
-        // Enable Config Center.
-      /*  ConfigCenterConfig configCenter = new ConfigCenterConfig();
-        configCenter.setAddress("zookeeper://127.0.0.1:2181");
-        configCenter.init();*/
+        setExternalConfigurationDirectly();
 
+        ServiceConfig<GreetingsService> service = new ServiceConfig<>();
+        service.setApplication(new ApplicationConfig("api-dubbo-provider"));
+        service.setInterface(GreetingsService.class);
+        service.setRef(new GreetingsServiceImpl());
+        service.export();
+        System.out.println("Dubbo provider started successfully!");
+        System.in.read();
+    }
 
-        // If you don't want to use ConfigCenter provided by dubbo, you can set external configuration to Dubbo directly.
-        // We created a Map instance manually and put a value into it, but in reality, the external configurations will most likely being generated from other plugins in your system.
+    /**
+     * If you don't want to use ConfigCenter provided by dubbo, you can set external configuration to Dubbo directly.
+     * In this sample, we created a Map instance manually and put a value into it, but in reality,
+     * the external configurations will most likely being generated from other plugins in your system.
+     */
+    public static void setExternalConfigurationDirectly() {
         Map<String, String> dubboConfigurations = new HashMap<>();
         dubboConfigurations.put("dubbo.registry.address", "zookeeper://127.0.0.1:2181");
         // you will need to add the configcenter address if you want to use the service governance features in 2.7, e.g., overrides and routers.
-        // but notice it will not be used for getting startup configurations.
+        // but notice it will not be used for gathering startup configurations.
         dubboConfigurations.put("dubbo.configcenter.address", "zookeeper://127.0.0.1:2181");
-        Environment.getInstance().setExternalConfig(dubboConfigurations);
+
         ConfigCenterConfig configCenter = new ConfigCenterConfig();
+        configCenter.setExternalConfig(dubboConfigurations);
         configCenter.init();
-
-
-        ServiceConfig<GreetingsService> service = new ServiceConfig<>();
-        service.setApplication(new ApplicationConfig("first-dubbo-provider"));
-//        service.setRegistry(new RegistryConfig("multicast://224.5.6.7:1234"));
-        service.setInterface(GreetingsService.class);
-        service.setRef(new GreetingsServiceImpl());
-        service.export();
-        System.out.println("first-dubbo-provider is running.");
-        System.in.read();
     }
 }
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/ZKTools.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/ZKTools.java
similarity index 78%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/ZKTools.java
copy to dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/ZKTools.java
index 4714fc4..9b07ced 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/ZKTools.java
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/ZKTools.java
@@ -14,12 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.samples;
+package org.apache.dubbo.samples.externalconfiguration;
+
+import org.apache.dubbo.common.utils.StringUtils;
 
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.retry.ExponentialBackoffRetry;
-import org.apache.dubbo.common.utils.StringUtils;
 
 /**
  *
@@ -28,20 +29,14 @@ public class ZKTools {
     private static CuratorFramework client;
 
     public static void main(String[] args) throws Exception {
-        client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", 60 * 1000, 60 * 1000,
-                new ExponentialBackoffRetry(1000, 3));
+        client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", 60 * 1000, 60 * 1000, new ExponentialBackoffRetry(1000, 3));
         client.start();
 
-        generateDubboPropertiesForGlobal();
+        clearGlobalDubboProperties();
     }
 
-    public static void generateDubboPropertiesForGlobal() {
-        String str = "dubbo.registry.address=zookeeper://127.0.0.1:2181\n" +
-                "#global config for consumer\n" +
-                "dubbo.consumer.timeout=6000\n" +
-                "#global config for provider\n" +
-                "dubbo.protocol.port=20990\n" +
-                "dubbo.provider.timeout=5000";
+    public static void clearGlobalDubboProperties() {
+        String str = "";
 
         System.out.println(str);
 
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/consumer/AnnotationConsumer.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/consumer/AnnotationConsumer.java
index 5133b3e..ae5a7ee 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/consumer/AnnotationConsumer.java
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/consumer/AnnotationConsumer.java
@@ -21,6 +21,7 @@ package org.apache.dubbo.samples.externalconfiguration.consumer;
 
 import org.apache.dubbo.config.spring.ConfigCenterBean;
 import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
+
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.context.ConfigurableApplicationContext;
@@ -42,12 +43,22 @@ public class AnnotationConsumer {
         System.err.println("result :" + result);
     }
 
+    /**
+     *
+     */
     @Configuration
     static public class ConsumerConfiguration {
+
+        /**
+         * It's still required to initialize ConfigCenterBean, here we use the JavaBean method, but it doesn't matter which way you use, for example, xml or .properties are all ok.
+         */
         @Bean
         public ConfigCenterBean configCenterBean() {
             ConfigCenterBean configCenterBean = new ConfigCenterBean();
-            configCenterBean.setAuto(true);
+            // This is a critical switch to tell Dubbo framework to get configs from standard Spring Environment
+            configCenterBean.setFromSpring(true);
+            configCenterBean.setConfigfile("dubbo.properties");// by default is dubbo.properties
+            configCenterBean.setLocalconfigfile("configcenter-annotation-provider.dubbo.properties"); // by default is application.dubbo.properties
             return configCenterBean;
         }
 
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/provider/AnnotationProvider.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/provider/AnnotationProvider.java
index 7343a7d..2ad582b 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/provider/AnnotationProvider.java
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/provider/AnnotationProvider.java
@@ -20,8 +20,10 @@
 package org.apache.dubbo.samples.externalconfiguration.provider;
 
 
+import org.apache.dubbo.config.ProviderConfig;
 import org.apache.dubbo.config.spring.ConfigCenterBean;
 import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
+
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.context.annotation.Bean;
@@ -44,14 +46,35 @@ public class AnnotationProvider {
 
     @Configuration
     static public class ProviderConfiguration {
+
+        /**
+         * It's still required to initialize ConfigCenterBean, here we use the JavaBean method, but it doesn't matter which way you use, for example, xml or .properties are all ok to go.
+         * <p>
+         * Notice that if you have a
+         */
         @Bean
         public ConfigCenterBean configCenterBean() {
             ConfigCenterBean configCenterBean = new ConfigCenterBean();
-            // This is the critical part that
-            configCenterBean.setAuto(true);
+            // This is a critical switch to tell Dubbo framework to get configs from standard Spring Environment
+            configCenterBean.setFromSpring(true);
+            configCenterBean.setConfigfile("dubbo.properties");// by default is dubbo.properties
+            configCenterBean.setLocalconfigfile("configcenter-annotation-provider.dubbo.properties"); // by default is application.dubbo.properties
             return configCenterBean;
         }
 
+        /**
+         * It's ok to have local configuration for each part, there's nothing different with 2.6.x regarding this part.
+         * It's only a matter of priority, by default, the external configuration (loaded from standard Spring Environment in this sample) has a higher priority than the local configuration.
+         *
+         * @return
+         */
+        @Bean
+        public ProviderConfig providerConfig() {
+            ProviderConfig providerConfig = new ProviderConfig();
+            providerConfig.setTimeout(6666);
+            return providerConfig;
+        }
+
     }
 
 }
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/spring/MyEnvironmentPostProcessor.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/spring/MyEnvironmentPostProcessor.java
index b7d9695..173afce 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/spring/MyEnvironmentPostProcessor.java
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/spring/MyEnvironmentPostProcessor.java
@@ -52,7 +52,7 @@ public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {
                 appReader = new BufferedReader(new InputStreamReader(MyEnvironmentPostProcessor.class.getResourceAsStream("/yourconfigcenter/dubbo-properties-in-configcenter-consumer.properties")));
             }
             appDubboProperties.put("application.dubbo.properties", appReader.lines().collect(Collectors.joining("\n")));
-            MapPropertySource appDubboPropertySource = new MapPropertySource("application.dubbo.properties", appDubboProperties);
+            MapPropertySource appDubboPropertySource = new MapPropertySource("configcenter-annotation-provider.dubbo.properties", appDubboProperties);
             environment.getPropertySources().addLast(appDubboPropertySource);
         } catch (Exception e) {
             e.printStackTrace();
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/resources/META-INF/spring/configcenter-consumer.xml b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/pom.xml
similarity index 57%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/resources/META-INF/spring/configcenter-consumer.xml
copy to dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/pom.xml
index 28192d2..415f715 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/resources/META-INF/spring/configcenter-consumer.xml
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/pom.xml
@@ -18,17 +18,16 @@
   ~
   -->
 
-<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
-       xmlns="http://www.springframework.org/schema/beans"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
-       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>dubbo-samples-configcenter</artifactId>
+        <groupId>org.apache.dubbo</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
 
-    <!-- optional -->
-    <dubbo:application name="configcenter-consumer"/>
+    <artifactId>dubbo-samples-configcenter-multi-registries</artifactId>
 
-    <dubbo:configcenter address="zookeeper://127.0.0.1:2181"/>
-
-    <dubbo:reference id="demoService" interface="org.apache.dubbo.samples.configcenter.api.DemoService"/>
-
-</beans>
\ No newline at end of file
+</project>
\ No newline at end of file
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/provider/AnnotationProvider.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/AnnotationConsumer.java
similarity index 52%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/provider/AnnotationProvider.java
copy to dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/AnnotationConsumer.java
index 7343a7d..b8d1623 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/provider/AnnotationProvider.java
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/AnnotationConsumer.java
@@ -17,40 +17,35 @@
  *
  */
 
-package org.apache.dubbo.samples.externalconfiguration.provider;
+package org.apache.dubbo.samples.annotation;
 
-
-import org.apache.dubbo.config.spring.ConfigCenterBean;
 import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.annotation.Bean;
+import org.apache.dubbo.samples.annotation.action.AnnotationAction;
+
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
 
 /**
- * MergeProvider
+ * CallbackConsumer
  */
-@SpringBootApplication
-@EnableDubbo(scanBasePackages = "org.apache.dubbo.samples.externalconfiguration.service")
-public class AnnotationProvider {
+public class AnnotationConsumer {
 
     public static void main(String[] args) throws Exception {
-        // start embedded zookeeper server
-        new EmbeddedZooKeeper(2181, false).start();
-
-        SpringApplication.run(AnnotationProvider.class, args);
+        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConsumerConfiguration.class);
+        context.start();
+        final AnnotationAction annotationAction = (AnnotationAction) context.getBean("annotationAction");
+        String hello = annotationAction.doSayHello("world");
+        System.out.println("result :" + hello);
         System.in.read();
     }
 
     @Configuration
-    static public class ProviderConfiguration {
-        @Bean
-        public ConfigCenterBean configCenterBean() {
-            ConfigCenterBean configCenterBean = new ConfigCenterBean();
-            // This is the critical part that
-            configCenterBean.setAuto(true);
-            return configCenterBean;
-        }
+    @EnableDubbo(scanBasePackages = "org.apache.dubbo.samples.annotation.action")
+    @PropertySource("classpath:/spring/dubbo-consumer.properties")
+    @ComponentScan(value = {"org.apache.dubbo.samples.annotation.action"})
+    static public class ConsumerConfiguration {
 
     }
 
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/provider/AnnotationProvider.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/AnnotationProvider.java
similarity index 64%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/provider/AnnotationProvider.java
copy to dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/AnnotationProvider.java
index 7343a7d..ff9048e 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/provider/AnnotationProvider.java
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/AnnotationProvider.java
@@ -17,41 +17,39 @@
  *
  */
 
-package org.apache.dubbo.samples.externalconfiguration.provider;
+package org.apache.dubbo.samples.annotation;
 
 
-import org.apache.dubbo.config.spring.ConfigCenterBean;
+import org.apache.dubbo.config.ProviderConfig;
 import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
 
 /**
  * MergeProvider
  */
-@SpringBootApplication
-@EnableDubbo(scanBasePackages = "org.apache.dubbo.samples.externalconfiguration.service")
 public class AnnotationProvider {
 
     public static void main(String[] args) throws Exception {
-        // start embedded zookeeper server
         new EmbeddedZooKeeper(2181, false).start();
-
-        SpringApplication.run(AnnotationProvider.class, args);
+        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ProviderConfiguration.class);
+        context.start();
         System.in.read();
     }
 
     @Configuration
+    @EnableDubbo(scanBasePackages = "org.apache.dubbo.samples.annotation.impl")
+    @PropertySource("classpath:/spring/dubbo-provider.properties")
     static public class ProviderConfiguration {
         @Bean
-        public ConfigCenterBean configCenterBean() {
-            ConfigCenterBean configCenterBean = new ConfigCenterBean();
-            // This is the critical part that
-            configCenterBean.setAuto(true);
-            return configCenterBean;
+        public ProviderConfig providerConfig() {
+            ProviderConfig providerConfig = new ProviderConfig();
+            providerConfig.setTimeout(1000);
+            return providerConfig;
         }
-
     }
 
 }
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/EmbeddedZooKeeper.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/EmbeddedZooKeeper.java
new file mode 100644
index 0000000..ae388dc
--- /dev/null
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/EmbeddedZooKeeper.java
@@ -0,0 +1,249 @@
+/*
+ * Copyright 2014 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.samples.annotation;
+
+import org.apache.zookeeper.server.ServerConfig;
+import org.apache.zookeeper.server.ZooKeeperServerMain;
+import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.SmartLifecycle;
+import org.springframework.util.ErrorHandler;
+import org.springframework.util.SocketUtils;
+
+import java.io.File;
+import java.lang.reflect.Method;
+import java.util.Properties;
+import java.util.UUID;
+
+/**
+ * from: https://github.com/spring-projects/spring-xd/blob/v1.3.1.RELEASE/spring-xd-dirt/src/main/java/org/springframework/xd/dirt/zookeeper/ZooKeeperUtils.java
+ * <p>
+ * Helper class to start an embedded instance of standalone (non clustered) ZooKeeper.
+ * <p>
+ * NOTE: at least an external standalone server (if not an ensemble) are recommended, even for
+ * {@link org.springframework.xd.dirt.server.singlenode.SingleNodeApplication}
+ *
+ * @author Patrick Peralta
+ * @author Mark Fisher
+ * @author David Turanski
+ */
+public class EmbeddedZooKeeper implements SmartLifecycle {
+
+    /**
+     * Logger.
+     */
+    private static final Logger logger = LoggerFactory.getLogger(EmbeddedZooKeeper.class);
+
+    /**
+     * ZooKeeper client port. This will be determined dynamically upon startup.
+     */
+    private final int clientPort;
+
+    /**
+     * Whether to auto-start. Default is true.
+     */
+    private boolean autoStartup = true;
+
+    /**
+     * Lifecycle phase. Default is 0.
+     */
+    private int phase = 0;
+
+    /**
+     * Thread for running the ZooKeeper server.
+     */
+    private volatile Thread zkServerThread;
+
+    /**
+     * ZooKeeper server.
+     */
+    private volatile ZooKeeperServerMain zkServer;
+
+    /**
+     * {@link ErrorHandler} to be invoked if an Exception is thrown from the ZooKeeper server thread.
+     */
+    private ErrorHandler errorHandler;
+
+    private boolean daemon = true;
+
+    /**
+     * Construct an EmbeddedZooKeeper with a random port.
+     */
+    public EmbeddedZooKeeper() {
+        clientPort = SocketUtils.findAvailableTcpPort();
+    }
+
+    /**
+     * Construct an EmbeddedZooKeeper with the provided port.
+     *
+     * @param clientPort port for ZooKeeper server to bind to
+     */
+    public EmbeddedZooKeeper(int clientPort, boolean daemon) {
+        this.clientPort = clientPort;
+        this.daemon = daemon;
+    }
+
+    /**
+     * Returns the port that clients should use to connect to this embedded server.
+     *
+     * @return dynamically determined client port
+     */
+    public int getClientPort() {
+        return this.clientPort;
+    }
+
+    /**
+     * Specify whether to start automatically. Default is true.
+     *
+     * @param autoStartup whether to start automatically
+     */
+    public void setAutoStartup(boolean autoStartup) {
+        this.autoStartup = autoStartup;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isAutoStartup() {
+        return this.autoStartup;
+    }
+
+    /**
+     * Specify the lifecycle phase for the embedded server.
+     *
+     * @param phase the lifecycle phase
+     */
+    public void setPhase(int phase) {
+        this.phase = phase;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public int getPhase() {
+        return this.phase;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isRunning() {
+        return (zkServerThread != null);
+    }
+
+    /**
+     * Start the ZooKeeper server in a background thread.
+     * <p>
+     * Register an error handler via {@link #setErrorHandler} in order to handle
+     * any exceptions thrown during startup or execution.
+     */
+    @Override
+    public synchronized void start() {
+        if (zkServerThread == null) {
+            zkServerThread = new Thread(new ServerRunnable(), "ZooKeeper Server Starter");
+            zkServerThread.setDaemon(daemon);
+            zkServerThread.start();
+        }
+    }
+
+    /**
+     * Shutdown the ZooKeeper server.
+     */
+    @Override
+    public synchronized void stop() {
+        if (zkServerThread != null) {
+            // The shutdown method is protected...thus this hack to invoke it.
+            // This will log an exception on shutdown; see
+            // https://issues.apache.org/jira/browse/ZOOKEEPER-1873 for details.
+            try {
+                Method shutdown = ZooKeeperServerMain.class.getDeclaredMethod("shutdown");
+                shutdown.setAccessible(true);
+                shutdown.invoke(zkServer);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+
+            // It is expected that the thread will exit after
+            // the server is shutdown; this will block until
+            // the shutdown is complete.
+            try {
+                zkServerThread.join(5000);
+                zkServerThread = null;
+            } catch (InterruptedException e) {
+                Thread.currentThread().interrupt();
+                logger.warn("Interrupted while waiting for embedded ZooKeeper to exit");
+                // abandoning zk thread
+                zkServerThread = null;
+            }
+        }
+    }
+
+    /**
+     * Stop the server if running and invoke the callback when complete.
+     */
+    @Override
+    public void stop(Runnable callback) {
+        stop();
+        callback.run();
+    }
+
+    /**
+     * Provide an {@link ErrorHandler} to be invoked if an Exception is thrown from the ZooKeeper server thread. If none
+     * is provided, only error-level logging will occur.
+     *
+     * @param errorHandler the {@link ErrorHandler} to be invoked
+     */
+    public void setErrorHandler(ErrorHandler errorHandler) {
+        this.errorHandler = errorHandler;
+    }
+
+    /**
+     * Runnable implementation that starts the ZooKeeper server.
+     */
+    private class ServerRunnable implements Runnable {
+
+        @Override
+        public void run() {
+            try {
+                Properties properties = new Properties();
+                File file = new File(System.getProperty("java.io.tmpdir") + File.separator + UUID.randomUUID());
+                file.deleteOnExit();
+                properties.setProperty("dataDir", file.getAbsolutePath());
+                properties.setProperty("clientPort", String.valueOf(clientPort));
+
+                QuorumPeerConfig quorumPeerConfig = new QuorumPeerConfig();
+                quorumPeerConfig.parseProperties(properties);
+
+                zkServer = new ZooKeeperServerMain();
+                ServerConfig configuration = new ServerConfig();
+                configuration.readFrom(quorumPeerConfig);
+
+                zkServer.runFromConfig(configuration);
+            } catch (Exception e) {
+                if (errorHandler != null) {
+                    errorHandler.handleError(e);
+                } else {
+                    logger.error("Exception running embedded ZooKeeper", e);
+                }
+            }
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/ZKTools.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/ZKTools.java
similarity index 82%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/ZKTools.java
copy to dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/ZKTools.java
index 4714fc4..febd018 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/ZKTools.java
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/ZKTools.java
@@ -14,12 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.samples;
+package org.apache.dubbo.samples.annotation;
+
+import org.apache.dubbo.common.utils.StringUtils;
 
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.retry.ExponentialBackoffRetry;
-import org.apache.dubbo.common.utils.StringUtils;
 
 /**
  *
@@ -28,20 +29,14 @@ public class ZKTools {
     private static CuratorFramework client;
 
     public static void main(String[] args) throws Exception {
-        client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", 60 * 1000, 60 * 1000,
-                new ExponentialBackoffRetry(1000, 3));
+        client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", 60 * 1000, 60 * 1000, new ExponentialBackoffRetry(1000, 3));
         client.start();
 
         generateDubboPropertiesForGlobal();
     }
 
     public static void generateDubboPropertiesForGlobal() {
-        String str = "dubbo.registry.address=zookeeper://127.0.0.1:2181\n" +
-                "#global config for consumer\n" +
-                "dubbo.consumer.timeout=6000\n" +
-                "#global config for provider\n" +
-                "dubbo.protocol.port=20990\n" +
-                "dubbo.provider.timeout=5000";
+        String str = "dubbo.registries.registry1.address=zookeeper://127.0.0.1:2181\n" + "dubbo.registries.registry2.address=zookeeper://127.0.0.1:2182\n";
 
         System.out.println(str);
 
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/action/AnnotationAction.java
similarity index 63%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java
copy to dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/action/AnnotationAction.java
index 08fbfde..d8dc4a8 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/action/AnnotationAction.java
@@ -17,18 +17,24 @@
  *
  */
 
-package org.apache.dubbo.samples.configcenter;
+package org.apache.dubbo.samples.annotation.action;
 
-import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.apache.dubbo.config.annotation.Reference;
+import org.apache.dubbo.samples.externalconfiguration.api.AnnotationService;
 
-public class BasicProvider {
+import org.springframework.stereotype.Component;
 
-    public static void main(String[] args) throws Exception {
-        new EmbeddedZooKeeper(2181, false).start();
-        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/configcenter-provider.xml"});
-        context.start();
+/**
+ * AnnotationAction
+ */
+@Component("annotationAction")
+public class AnnotationAction {
+
+    @Reference
+    private AnnotationService annotationService;
 
-        System.in.read(); // press any key to exit
+    public String doSayHello(String name) {
+        return annotationService.sayHello(name);
     }
 
 }
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/api/AnnotationService.java
similarity index 62%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java
copy to dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/api/AnnotationService.java
index 08fbfde..8378798 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/api/AnnotationService.java
@@ -17,18 +17,13 @@
  *
  */
 
-package org.apache.dubbo.samples.configcenter;
+package org.apache.dubbo.samples.externalconfiguration.api;
 
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-public class BasicProvider {
-
-    public static void main(String[] args) throws Exception {
-        new EmbeddedZooKeeper(2181, false).start();
-        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/configcenter-provider.xml"});
-        context.start();
+/**
+ * AsyncService
+ */
+public interface AnnotationService {
 
-        System.in.read(); // press any key to exit
-    }
+    String sayHello(String name);
 
 }
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/impl/AnnotationServiceImpl.java
similarity index 63%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java
copy to dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/impl/AnnotationServiceImpl.java
index 08fbfde..df6d8d4 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation/impl/AnnotationServiceImpl.java
@@ -17,18 +17,21 @@
  *
  */
 
-package org.apache.dubbo.samples.configcenter;
+package org.apache.dubbo.samples.annotation.impl;
 
-import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.apache.dubbo.config.annotation.Service;
+import org.apache.dubbo.samples.externalconfiguration.api.AnnotationService;
 
-public class BasicProvider {
-
-    public static void main(String[] args) throws Exception {
-        new EmbeddedZooKeeper(2181, false).start();
-        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/configcenter-provider.xml"});
-        context.start();
+/**
+ * AsyncServiceImpl
+ */
+@Service(registry = "registry1")
+public class AnnotationServiceImpl implements AnnotationService {
 
-        System.in.read(); // press any key to exit
+    @Override
+    public String sayHello(String name) {
+        System.out.println("provider received: " + name);
+        return "annotation: hello, " + name;
     }
 
 }
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/resources/log4j.properties
similarity index 65%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties
copy to dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/resources/log4j.properties
index 4054da2..e976f5c 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/resources/log4j.properties
@@ -16,10 +16,10 @@
 #   limitations under the License.
 #  
 #
-dubbo.application.name=configcenter-annotation-provider
-dubbo.configcenter.address=zookeeper://127.0.0.1:2181
-dubbo.configcenter.configfile=dubbo.properties
-# The common part, for example registry, protocol can be stored under the global group in ConfigCenter
-#dubbo.registry.address=zookeeper://127.0.0.1:2181
-# The application specific part, can be stored under the app group in the ConfigCenter
-#dubbo.consumer.timeout=3000
\ No newline at end of file
+###set log levels###
+log4j.rootLogger=info, stdout
+###output to the console###
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n
\ No newline at end of file
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/resources/spring/dubbo-consumer.properties
similarity index 89%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties
copy to dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/resources/spring/dubbo-consumer.properties
index 4054da2..fa5da7e 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-consumer.properties
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/resources/spring/dubbo-consumer.properties
@@ -17,8 +17,8 @@
 #  
 #
 dubbo.application.name=configcenter-annotation-provider
-dubbo.configcenter.address=zookeeper://127.0.0.1:2181
-dubbo.configcenter.configfile=dubbo.properties
+dubbo.config-center.address=zookeeper://127.0.0.1:2181
+dubbo.config-center.configfile=dubbo.properties
 # The common part, for example registry, protocol can be stored under the global group in ConfigCenter
 #dubbo.registry.address=zookeeper://127.0.0.1:2181
 # The application specific part, can be stored under the app group in the ConfigCenter
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-provider.properties b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/resources/spring/dubbo-provider.properties
similarity index 89%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-provider.properties
copy to dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/resources/spring/dubbo-provider.properties
index 976b1c4..bb7d957 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/spring/dubbo-provider.properties
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/resources/spring/dubbo-provider.properties
@@ -17,8 +17,8 @@
 #  
 #
 dubbo.application.name=configcenter-annotation-provider
-dubbo.configcenter.address=zookeeper://127.0.0.1:2181
-dubbo.configcenter.configfile=dubbo.properties
+dubbo.config-center.address=zookeeper://127.0.0.1:2181
+dubbo.config-center.configfile=dubbo.properties
 # The common part, for example registry, protocol can be stored under the global group in ConfigCenter
 # The application specific part, can be stored under the app group in the ConfigCenter
 #dubbo.registry.address=zookeeper://127.0.0.1:2181
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-multiprotocol/src/main/java/org/apache/dubbo/samples/configcenter/ZKTools.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-multiprotocol/src/main/java/org/apache/dubbo/samples/configcenter/ZKTools.java
index ebcf077..4cf3931 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-multiprotocol/src/main/java/org/apache/dubbo/samples/configcenter/ZKTools.java
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-multiprotocol/src/main/java/org/apache/dubbo/samples/configcenter/ZKTools.java
@@ -16,10 +16,11 @@
  */
 package org.apache.dubbo.samples.configcenter;
 
+import org.apache.dubbo.common.utils.StringUtils;
+
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.retry.ExponentialBackoffRetry;
-import org.apache.dubbo.common.utils.StringUtils;
 
 /**
  *
@@ -31,18 +32,35 @@ public class ZKTools {
         client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", 60 * 1000, 60 * 1000,
                 new ExponentialBackoffRetry(1000, 3));
         client.start();
+//
+//        generateDubboPropertiesForGlobal();
+//        generateDubboPropertiesForApp();
+        System.in.read();
+    }
+
+    public static void generateDubboPropertiesForGlobal() {
+        String str = "dubbo.registry.address=zookeeper://127.0.0.1:2181";
+
+//        String str = "dubbo.registry.address=zookeeper://127.0.0.1:2183\n" +
+//                "dubbo.registries.registry1.address=zookeeper://127.0.0.1:2181\n" +
+//                "dubbo.registries.registry2.address=zookeeper://127.0.0.1:2181\n";
+
+        System.out.println(str);
 
-        generateDubboPropertiesForApp();
+        try {
+            String path = "/dubbo/config/dubbo/dubbo.properties";
+            if (client.checkExists().forPath(path) == null) {
+                client.create().creatingParentsIfNeeded().forPath(path);
+            }
+            setData(path, str);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
 
     public static void generateDubboPropertiesForApp() {
-        String str = "#key: dubbo.{item-name}.{id}.{property}\n" +
-                "dubbo.protocols=dubbo,hessian" +
-                "dubbo.protocol.dubbo.name=dubbo\n" +
-                "dubbo.protocol.dubbo.port=20991\n" +
-                "\n" +
-                "dubbo.protocol.hessian.name=hessian\n" +
-                "dubbo.protocol.hessian.port=8089";
+        String str = "#key: dubbo.{item-name}.{id}.{property}\n" + "dubbo.protocols.dubbo1.name=dubbo\n" + "dubbo.protocols.dubbo1.port=20991\n" +
+                "\n" + "dubbo.protocols.hessian1.name=hessian\n" + "dubbo.protocols.hessian1.port=8089";
 
         System.out.println(str);
 
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-multiprotocol/src/main/resources/META-INF/spring/configcenter-consumer.xml b/dubbo-samples-configcenter/dubbo-samples-configcenter-multiprotocol/src/main/resources/META-INF/spring/configcenter-consumer.xml
index b76bffb..0c56766 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-multiprotocol/src/main/resources/META-INF/spring/configcenter-consumer.xml
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-multiprotocol/src/main/resources/META-INF/spring/configcenter-consumer.xml
@@ -26,7 +26,7 @@
 
     <dubbo:application name="configcenter-multiprotocol-consumer"/>
 
-    <dubbo:configcenter address="zookeeper://127.0.0.1:2181" configfile="dubbo.properties"/>
+    <dubbo:config-center address="zookeeper://127.0.0.1:2181" configfile="dubbo.properties"/>
 
     <dubbo:reference id="demoService" protocol="hessian"
                      interface="org.apache.dubbo.samples.configcenter.api.DemoService"/>
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-multiprotocol/src/main/resources/META-INF/spring/configcenter-provider.xml b/dubbo-samples-configcenter/dubbo-samples-configcenter-multiprotocol/src/main/resources/META-INF/spring/configcenter-provider.xml
index 1cae174..163acc0 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-multiprotocol/src/main/resources/META-INF/spring/configcenter-provider.xml
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-multiprotocol/src/main/resources/META-INF/spring/configcenter-provider.xml
@@ -26,15 +26,14 @@
 
     <dubbo:application name="configcenter-multiprotocol-provider"/>
 
-    <dubbo:configcenter address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:config-center address="zookeeper://127.0.0.1:2181"/>
 
-    <dubbo:protocol id="dubbo"/>
-    <dubbo:protocol id="hessian"/>
+    <dubbo:provider protocol="hessian1"/>
 
     <bean id="demoService" class="org.apache.dubbo.samples.configcenter.impl.DemoServiceImpl"/>
-    <dubbo:service protocol="dubbo" interface="org.apache.dubbo.samples.configcenter.api.DemoService"
+    <dubbo:service interface="org.apache.dubbo.samples.configcenter.api.DemoService"
                    ref="demoService"/>
-    <dubbo:service protocol="hessian" interface="org.apache.dubbo.samples.configcenter.api.DemoService"
+    <dubbo:service protocol="dubbo1" interface="org.apache.dubbo.samples.configcenter.api.DemoService"
                    ref="demoService"/>
 
 </beans>
\ No newline at end of file
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java
index 08fbfde..ccc6002 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/BasicProvider.java
@@ -24,7 +24,7 @@ import org.springframework.context.support.ClassPathXmlApplicationContext;
 public class BasicProvider {
 
     public static void main(String[] args) throws Exception {
-        new EmbeddedZooKeeper(2181, false).start();
+//        new EmbeddedZooKeeper(2181, false).start();
         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/configcenter-provider.xml"});
         context.start();
 
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/ZKTools.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/ZKTools.java
index ede7de3..93f3199 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/ZKTools.java
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/java/org/apache/dubbo/samples/configcenter/ZKTools.java
@@ -16,10 +16,11 @@
  */
 package org.apache.dubbo.samples.configcenter;
 
+import org.apache.dubbo.common.utils.StringUtils;
+
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.retry.ExponentialBackoffRetry;
-import org.apache.dubbo.common.utils.StringUtils;
 
 /**
  *
@@ -38,12 +39,7 @@ public class ZKTools {
     }
 
     public static void generateDubboPropertiesForGlobal() {
-        String str = "dubbo.registry.address=zookeeper://127.0.0.1:2181\n" +
-                "#global config for consumer\n" +
-                "dubbo.consumer.timeout=6000\n" +
-                "#global config for provider\n" +
-                "dubbo.protocol.port=20990\n" +
-                "dubbo.provider.timeout=5000";
+        String str = "";
 
         System.out.println(str);
 
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/resources/META-INF/spring/configcenter-consumer.xml b/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/resources/META-INF/spring/configcenter-consumer.xml
index 28192d2..d5331fb 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/resources/META-INF/spring/configcenter-consumer.xml
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/resources/META-INF/spring/configcenter-consumer.xml
@@ -27,7 +27,7 @@
     <!-- optional -->
     <dubbo:application name="configcenter-consumer"/>
 
-    <dubbo:configcenter address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:config-center address="zookeeper://127.0.0.1:2181"/>
 
     <dubbo:reference id="demoService" interface="org.apache.dubbo.samples.configcenter.api.DemoService"/>
 
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/resources/META-INF/spring/configcenter-provider.xml b/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/resources/META-INF/spring/configcenter-provider.xml
index 73a5b5a..669f90d 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/resources/META-INF/spring/configcenter-provider.xml
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/resources/META-INF/spring/configcenter-provider.xml
@@ -27,9 +27,9 @@
     <!-- optional -->
     <dubbo:application name="configcenter-provider"/>
 
-    <dubbo:configcenter address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:config-center address="zookeeper://127.0.0.1:2181"/>
 
     <bean id="demoService" class="org.apache.dubbo.samples.configcenter.impl.DemoServiceImpl"/>
-    <dubbo:service async="true" interface="org.apache.dubbo.samples.configcenter.api.DemoService" ref="demoService"/>
+    <dubbo:service interface="org.apache.dubbo.samples.configcenter.api.DemoService" ref="demoService"/>
 
 </beans>
\ No newline at end of file
diff --git a/dubbo-samples-configcenter/pom.xml b/dubbo-samples-configcenter/pom.xml
index 864ceef..b8764dc 100644
--- a/dubbo-samples-configcenter/pom.xml
+++ b/dubbo-samples-configcenter/pom.xml
@@ -32,6 +32,7 @@
     <modules>
         <module>dubbo-samples-configcenter-xml</module>
         <module>dubbo-samples-configcenter-multiprotocol</module>
+        <module>dubbo-samples-configcenter-multi-registries</module>
         <module>dubbo-samples-configcenter-annotation</module>
         <module>dubbo-samples-configcenter-externalconfiguration</module>
         <module>dubbo-samples-configcenter-api</module>
diff --git a/dubbo-samples-governance/dubbo-samples-applevel-override/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java b/dubbo-samples-governance/dubbo-samples-applevel-override/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
index 28bf140..ec2228c 100644
--- a/dubbo-samples-governance/dubbo-samples-applevel-override/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
+++ b/dubbo-samples-governance/dubbo-samples-applevel-override/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
@@ -16,10 +16,11 @@
  */
 package org.apache.dubbo.samples.governance;
 
+import org.apache.dubbo.common.utils.StringUtils;
+
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.retry.ExponentialBackoffRetry;
-import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.zookeeper.CreateMode;
 
 /**
@@ -33,24 +34,22 @@ public class ZKTools {
                 new ExponentialBackoffRetry(1000, 3));
         client.start();
 
-//        generateAppevelOverride();
-//        System.in.read();
-        generateAppevelOverrideConsumer();
+        generateAppLevelOverride();
+        System.in.read();
+        generateAppLevelOverrideConsumer();
     }
 
-    public static void generateAppevelOverride() {
+    public static void generateAppLevelOverride() {
         String str = "# Execute on governance-appoverride-provider only\n" +
                 "# the governance-appoverride-provider instances on those provides who's port is 20880 will be lifted to 1000\n" +
                 "# this will take effect on all services on governance-appoverride-provider.\n" +
-                "---\n" +
-                "apiVersion: v2.7\n" +
+                "---\n" + "configVersion: v2.7\n" +
                 "scope: application\n" +
                 "key: governance-appoverride-provider\n" +
                 "enabled: true\n" +
                 "configs:\n" +
-                "- addresses: [\"0.0.0.0:20880\"]\n" +
-                "  parameters:\n" +
-                "    weight: 1000\n" +
+                "- addresses: [\"0.0.0.0:20880\"]\n" + "  side: provider\n" +
+                "  parameters:\n" + "    weight: 900\n" +
                 "...";
 
         System.out.println(str);
@@ -69,20 +68,18 @@ public class ZKTools {
     /**
      *
      */
-    public static void generateAppevelOverrideConsumer() {
+    public static void generateAppLevelOverrideConsumer() {
         String str = "# Execute on demo-consumer only\n" +
                 "# the traffic come out from governance-appoverride-consumer will be distributed evenly across all providers,\n" +
                 "# because governance-appoverride-consumer will consider them having the same weight 100.\n" +
-                "---\n" +
-                "apiVersion: v2.7\n" +
+                "---\n" + "configVersion: v2.7\n" +
                 "scope: application\n" +
                 "key: governance-appoverride-consumer\n" +
                 "enabled: true\n" +
                 "configs:\n" +
                 "- addresses: [\"0.0.0.0\"]\n" +
                 "  side: consumer\n" +
-                "  parameters:\n" +
-                "    weight: 140\n" +
+                "  parameters:\n" + "    weight: 100\n" +
                 "...\n";
 
         System.out.println(str);
diff --git a/dubbo-samples-governance/dubbo-samples-applevel-override/src/main/resources/spring/dubbo-demo-consumer.xml b/dubbo-samples-governance/dubbo-samples-applevel-override/src/main/resources/spring/dubbo-demo-consumer.xml
index 83834c6..d0728ea 100644
--- a/dubbo-samples-governance/dubbo-samples-applevel-override/src/main/resources/spring/dubbo-demo-consumer.xml
+++ b/dubbo-samples-governance/dubbo-samples-applevel-override/src/main/resources/spring/dubbo-demo-consumer.xml
@@ -31,7 +31,7 @@
     <!-- optional, use multicast registry center to discover service -->
     <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
 
-    <dubbo:configcenter priority="false" address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:config-center enable="false" address="zookeeper://127.0.0.1:2181"/>
 
     <!-- generate proxy for the remote service, then demoService can be used in the same way as the
     local regular interface -->
diff --git a/dubbo-samples-governance/dubbo-samples-applevel-override/src/main/resources/spring/dubbo-demo-provider.xml b/dubbo-samples-governance/dubbo-samples-applevel-override/src/main/resources/spring/dubbo-demo-provider.xml
index 90245df..ce54ed5 100644
--- a/dubbo-samples-governance/dubbo-samples-applevel-override/src/main/resources/spring/dubbo-demo-provider.xml
+++ b/dubbo-samples-governance/dubbo-samples-applevel-override/src/main/resources/spring/dubbo-demo-provider.xml
@@ -33,7 +33,7 @@
     <!--optional, use dubbo protocol to export service on port 20880 -->
     <dubbo:protocol name="dubbo" port="-1"/>
 
-    <dubbo:configcenter priority="false" address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:config-center enable="false" address="zookeeper://127.0.0.1:2181"/>
 
     <!-- service implementation, as same as regular local bean -->
     <bean id="demoService" class="org.apache.dubbo.samples.governance.impl.DemoServiceImpl"/>
diff --git a/dubbo-samples-governance/dubbo-samples-configconditionrouter/src/main/java/org/apache/dubbo/samples/governance/BasicConsumer.java b/dubbo-samples-governance/dubbo-samples-configconditionrouter/src/main/java/org/apache/dubbo/samples/governance/BasicConsumer.java
index 228e960..2dd119a 100644
--- a/dubbo-samples-governance/dubbo-samples-configconditionrouter/src/main/java/org/apache/dubbo/samples/governance/BasicConsumer.java
+++ b/dubbo-samples-governance/dubbo-samples-configconditionrouter/src/main/java/org/apache/dubbo/samples/governance/BasicConsumer.java
@@ -19,9 +19,9 @@
 
 package org.apache.dubbo.samples.governance;
 
-import org.apache.dubbo.rpc.RpcContext;
 import org.apache.dubbo.samples.governance.api.DemoService;
 import org.apache.dubbo.samples.governance.api.DemoService2;
+
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 public class BasicConsumer {
@@ -35,11 +35,9 @@ public class BasicConsumer {
         while (true) {
             try {
                 Thread.sleep(1000);
-                RpcContext.getContext().setAttachment("tag", "tag1");
                 String hello = demoService.sayHello("world"); // call remote method
                 System.out.println(hello); // get result
 
-                RpcContext.getContext().setAttachment("tag", "tag2");
                 String hello2 = demoService2.sayHello("world again"); // call remote method
                 System.out.println(hello2); // get result
 
diff --git a/dubbo-samples-governance/dubbo-samples-configconditionrouter/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java b/dubbo-samples-governance/dubbo-samples-configconditionrouter/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
index 8a68bbb..7f38b15 100644
--- a/dubbo-samples-governance/dubbo-samples-configconditionrouter/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
+++ b/dubbo-samples-governance/dubbo-samples-configconditionrouter/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
@@ -16,10 +16,11 @@
  */
 package org.apache.dubbo.samples.governance;
 
+import org.apache.dubbo.common.utils.StringUtils;
+
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.retry.ExponentialBackoffRetry;
-import org.apache.dubbo.common.utils.StringUtils;
 
 /**
  *
@@ -39,13 +40,10 @@ public class ZKTools {
         String str = "---\n" +
                 "scope: application\n" +
                 "force: true\n" +
-                "runtime: true\n" +
-                "enabled: true\n" +
+                "runtime: true\n" + "enabled: false\n" +
                 "priority: 2\n" +
                 "key: demo-consumer\n" +
-                "conditions:\n" +
-                " - interface=org.apache.dubbo.samples.governance.api.DemoService&method=sayHello=>address=*:20880\n" +
-                " - interface=org.apache.dubbo.samples.governance.api.DemoService2&method=sayHello=>address=*:20881\n" +
+                "conditions:\n" + " - interface=org.apache.dubbo.samples.governance.api.DemoService=>address=*:20880\n" + " - interface=org.apache.dubbo.samples.governance.api.DemoService2=>address=*:20881\n" + "blackWhiteList:\n" + " enabled: true\n" + " conditions:\n" + "  - interface=org.apache.dubbo.samples.governance.api.DemoService=>address=*:20880\n" + "  - interface=org.apache.dubbo.samples.governance.api.DemoService2=>address=*:20881\n" +
                 "...";
 
         System.out.println(str);
diff --git a/dubbo-samples-governance/dubbo-samples-configconditionrouter/src/main/resources/spring/dubbo-demo-consumer.xml b/dubbo-samples-governance/dubbo-samples-configconditionrouter/src/main/resources/spring/dubbo-demo-consumer.xml
index d202388..5bdb8e4 100644
--- a/dubbo-samples-governance/dubbo-samples-configconditionrouter/src/main/resources/spring/dubbo-demo-consumer.xml
+++ b/dubbo-samples-governance/dubbo-samples-configconditionrouter/src/main/resources/spring/dubbo-demo-consumer.xml
@@ -31,7 +31,7 @@
     <!-- optional, use multicast registry center to discover service -->
     <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
 
-    <dubbo:configcenter address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:config-center enable="false" address="zookeeper://127.0.0.1:2181"/>
 
     <!-- generate proxy for the remote service, then demoService can be used in the same way as the
     local regular interface -->
diff --git a/dubbo-samples-governance/dubbo-samples-configconditionrouter/src/main/resources/spring/dubbo-demo-provider.xml b/dubbo-samples-governance/dubbo-samples-configconditionrouter/src/main/resources/spring/dubbo-demo-provider.xml
index 52298b6..abe8c35 100644
--- a/dubbo-samples-governance/dubbo-samples-configconditionrouter/src/main/resources/spring/dubbo-demo-provider.xml
+++ b/dubbo-samples-governance/dubbo-samples-configconditionrouter/src/main/resources/spring/dubbo-demo-provider.xml
@@ -33,7 +33,7 @@
     <!--optional, use dubbo protocol to export service on port 20880 -->
     <dubbo:protocol name="dubbo" port="-1"/>
 
-    <dubbo:configcenter address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:config-center enable="false" address="zookeeper://127.0.0.1:2181"/>
 
     <!-- service implementation, as same as regular local bean -->
     <bean id="demoService" class="org.apache.dubbo.samples.governance.impl.DemoServiceImpl"/>
diff --git a/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java b/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
index f8f6e42..cf6a090 100644
--- a/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
+++ b/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
@@ -16,10 +16,11 @@
  */
 package org.apache.dubbo.samples.governance;
 
+import org.apache.dubbo.common.utils.StringUtils;
+
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.retry.ExponentialBackoffRetry;
-import org.apache.dubbo.common.utils.StringUtils;
 
 /**
  *
@@ -37,16 +38,14 @@ public class ZKTools {
 
     public static void generateServiceLevelOverride() {
         String str = "# All Consumers that consume the service org.apache.dubbo.samples.governance.api.DemoService will increase the timeout value to 6000\n" +
-                "---\n" +
-                "apiVersion: v2.7\n" +
+                "---\n" + "configVersion: v2.7\n" +
                 "scope: service\n" +
                 "key: org.apache.dubbo.samples.governance.api.DemoService\n" +
                 "enabled: true\n" +
                 "configs:\n" +
                 "- addresses: [0.0.0.0]\n" +
                 "  side: consumer\n" +
-                "  parameters:\n" +
-                "    timeout: 4000\n" +
+                "  parameters:\n" + "    timeout: 6000\n" +
                 "...\n";
 
         System.out.println(str);
diff --git a/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/resources/spring/dubbo-demo-consumer.xml b/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/resources/spring/dubbo-demo-consumer.xml
index 054974c..47d2c73 100644
--- a/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/resources/spring/dubbo-demo-consumer.xml
+++ b/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/resources/spring/dubbo-demo-consumer.xml
@@ -31,10 +31,11 @@
     <!-- optional, use multicast registry center to discover service -->
     <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
 
-    <dubbo:configcenter address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:config-center address="zookeeper://127.0.0.1:2181"/>
 
     <!-- generate proxy for the remote service, then demoService can be used in the same way as the
     local regular interface -->
-    <dubbo:reference id="demoService" check="false" interface="org.apache.dubbo.samples.governance.api.DemoService"/>
+    <dubbo:reference timeout="1000" id="demoService" check="false"
+                     interface="org.apache.dubbo.samples.governance.api.DemoService"/>
 
 </beans>
\ No newline at end of file
diff --git a/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/resources/spring/dubbo-demo-provider.xml b/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/resources/spring/dubbo-demo-provider.xml
index d3c53e7..aa65db3 100644
--- a/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/resources/spring/dubbo-demo-provider.xml
+++ b/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/resources/spring/dubbo-demo-provider.xml
@@ -33,8 +33,6 @@
     <!--optional, use dubbo protocol to export service on port 20880 -->
     <dubbo:protocol name="dubbo" port="20890"/>
 
-    <!--<dubbo:configcenter address="zookeeper://127.0.0.1:2181"/>-->
-
     <!-- service implementation, as same as regular local bean -->
     <bean id="demoService" class="org.apache.dubbo.samples.governance.impl.DemoServiceImpl"/>
 
diff --git a/dubbo-samples-governance/dubbo-samples-tagrouter/src/main/java/org/apache/dubbo/samples/governance/BasicConsumer.java b/dubbo-samples-governance/dubbo-samples-tagrouter/src/main/java/org/apache/dubbo/samples/governance/BasicConsumer.java
index 228e960..4109abb 100644
--- a/dubbo-samples-governance/dubbo-samples-tagrouter/src/main/java/org/apache/dubbo/samples/governance/BasicConsumer.java
+++ b/dubbo-samples-governance/dubbo-samples-tagrouter/src/main/java/org/apache/dubbo/samples/governance/BasicConsumer.java
@@ -19,9 +19,11 @@
 
 package org.apache.dubbo.samples.governance;
 
+import org.apache.dubbo.common.Constants;
 import org.apache.dubbo.rpc.RpcContext;
 import org.apache.dubbo.samples.governance.api.DemoService;
 import org.apache.dubbo.samples.governance.api.DemoService2;
+
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 public class BasicConsumer {
@@ -35,11 +37,12 @@ public class BasicConsumer {
         while (true) {
             try {
                 Thread.sleep(1000);
-                RpcContext.getContext().setAttachment("tag", "tag1");
+                RpcContext.getContext().setAttachment(Constants.TAG_KEY, "tag1");
                 String hello = demoService.sayHello("world"); // call remote method
                 System.out.println(hello); // get result
 
-                RpcContext.getContext().setAttachment("tag", "tag2");
+                RpcContext.getContext().setAttachment(Constants.TAG_KEY, "tag2");
+//                RpcContext.getContext().setAttachment(Constants.FORCE_USE_TAG, "true");
                 String hello2 = demoService2.sayHello("world again"); // call remote method
                 System.out.println(hello2); // get result
 
diff --git a/dubbo-samples-governance/dubbo-samples-tagrouter/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java b/dubbo-samples-governance/dubbo-samples-tagrouter/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
index 7f1fb95..9761b67 100644
--- a/dubbo-samples-governance/dubbo-samples-tagrouter/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
+++ b/dubbo-samples-governance/dubbo-samples-tagrouter/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
@@ -16,10 +16,11 @@
  */
 package org.apache.dubbo.samples.governance;
 
+import org.apache.dubbo.common.utils.StringUtils;
+
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.retry.ExponentialBackoffRetry;
-import org.apache.dubbo.common.utils.StringUtils;
 
 /**
  *
@@ -40,13 +41,10 @@ public class ZKTools {
                 "force: false\n" +
                 "runtime: true\n" +
                 "enabled: true\n" +
-                "priority: 1\n" +
-                "key: demo-provider\n" +
+                "priority: 1\n" + "key: governance-tagrouter-provider\n" +
                 "tags:\n" +
-                "  - name: tag1\n" +
-                "    addresses: [\"192.168.1.6:20881\"]\n" +
-                "  - name: tag2\n" +
-                "    addresses: [\"192.168.1.6:20880\"]\n" +
+                "  - name: tag1\n" + "    addresses: [\"30.5.121.131:20880\"]\n" +
+                "  - name: tag2\n" + "    addresses: [\"30.5.121.131:20881\"]\n" +
                 "...";
 
         System.out.println(str);
diff --git a/dubbo-samples-governance/dubbo-samples-tagrouter/src/main/resources/spring/dubbo-demo-consumer.xml b/dubbo-samples-governance/dubbo-samples-tagrouter/src/main/resources/spring/dubbo-demo-consumer.xml
index ac2474a..1ba31de 100644
--- a/dubbo-samples-governance/dubbo-samples-tagrouter/src/main/resources/spring/dubbo-demo-consumer.xml
+++ b/dubbo-samples-governance/dubbo-samples-tagrouter/src/main/resources/spring/dubbo-demo-consumer.xml
@@ -31,7 +31,7 @@
     <!-- optional, use multicast registry center to discover service -->
     <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
 
-    <dubbo:configcenter address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:config-center enable="false" address="zookeeper://127.0.0.1:2181"/>
 
     <!-- generate proxy for the remote service, then demoService can be used in the same way as the
     local regular interface -->
diff --git a/dubbo-samples-governance/dubbo-samples-tagrouter/src/main/resources/spring/dubbo-demo-provider.xml b/dubbo-samples-governance/dubbo-samples-tagrouter/src/main/resources/spring/dubbo-demo-provider.xml
index eb6fc71..718c3aa 100644
--- a/dubbo-samples-governance/dubbo-samples-tagrouter/src/main/resources/spring/dubbo-demo-provider.xml
+++ b/dubbo-samples-governance/dubbo-samples-tagrouter/src/main/resources/spring/dubbo-demo-provider.xml
@@ -33,7 +33,7 @@
     <!--optional, use dubbo protocol to export service on port 20880 -->
     <dubbo:protocol name="dubbo" port="-1"/>
 
-    <dubbo:configcenter address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:config-center enable="false" address="zookeeper://127.0.0.1:2181"/>
 
     <!-- service implementation, as same as regular local bean -->
     <bean id="demoService" class="org.apache.dubbo.samples.governance.impl.DemoServiceImpl"/>
diff --git a/pom.xml b/pom.xml
index 9ee8207..47136ba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,6 +56,7 @@
         <module>dubbo-samples-governance</module>
         <module>dubbo-samples-metadata-report</module>
         <module>dubbo-samples-simplified-registry</module>
+        <module>dubbo-samples-concurrency</module>
     </modules>
 
     <properties>
@@ -198,6 +199,10 @@
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-configcenter-zookeeper</artifactId>
+        </dependency>
     </dependencies>