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:23 UTC

[incubator-dubbo-samples] branch samples-for-2.7.0-SNAPSHOT updated (26224ee -> ad3d8f4)

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

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


    from 26224ee  change api
     new ee88706  make sure different curator and zookeeper versions work together
     new c6d5029  optimize samples for 2.7.0
     new ad3d8f4  update samples for 2.7.0-SNAPSHOT

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../apache/dubbo/samples/client/Application.java   |  16 ++-
 .../dubbo-samples-chain-api}/pom.xml               |   4 +-
 .../apache/dubbo/samples/governance}/ZKTools.java  |  42 ++++---
 .../samples/governance/api/AmericanService.java    |  11 +-
 .../dubbo/samples/governance/api/CatService.java   |   9 +-
 .../samples/governance/api/ChineseService.java     |  11 +-
 .../dubbo/samples/governance/api/DogService.java   |   9 +-
 .../dubbo/samples/governance/api/LionService.java  |   9 +-
 .../dubbo/samples/governance/api/TigerService.java |   9 +-
 .../dubbo-samples-chain-backend}/pom.xml           |   8 +-
 .../dubbo/samples/governance/BackendProvider.java  |   2 +-
 .../samples/governance/impl/CatServiceImpl.java    |  22 ++--
 .../samples/governance/impl/DogServiceImpl.java    |  38 +++---
 .../samples/governance/impl/LionServiceImpl.java   |  22 ++--
 .../samples/governance/impl/TigerServiceImpl.java  |  22 ++--
 .../src/main/resources/log4j.properties            |   0
 .../main/resources/spring/dubbo-demo-provider.xml  |  26 ++--
 .../dubbo-samples-chain-front}/pom.xml             |   8 +-
 .../dubbo/samples/governance/FrontendConsumer.java | 132 +++++++++++++++++++++
 .../src/main/resources/log4j.properties            |   0
 .../main/resources/spring/dubbo-demo-consumer.xml  |  16 ++-
 .../dubbo-samples-chain-middle}/pom.xml            |   8 +-
 .../samples/governance/MiddleEndProvider.java      |   3 +-
 .../governance/impl/AmericanServiceImpl.java       |  68 +++++++++++
 .../governance/impl/ChineseServiceImpl.java        |  63 ++++++++++
 .../src/main/resources/log4j.properties            |   0
 .../main/resources/spring/dubbo-demo-provider.xml  |  33 +++---
 .../pom.xml                                        |  10 +-
 .../samples/annotation/AnnotationConsumer.java     |   5 +-
 .../src/main/resources/config-center.properties}   |  27 +++--
 .../resources/spring/dubbo-consumer.properties     |   7 +-
 .../resources/spring/dubbo-provider.properties     |   5 +-
 .../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         |  13 +-
 .../dubbo-properties-in-configcenter.properties    |   1 -
 .../pom.xml                                        |   2 +-
 .../samples/annotation/AnnotationConsumer.java     |   1 +
 .../samples/annotation/AnnotationProvider.java     |   1 +
 .../samples/annotation/EmbeddedZooKeeper.java      |   3 +-
 .../apache/dubbo/samples/annotation}/ZKTools.java  |  15 +--
 .../annotation/action/AnnotationAction.java        |   1 +
 .../samples/annotation/api/AnnotationService.java  |   0
 .../annotation/impl/AnnotationServiceImpl.java     |   2 +-
 .../src/main/resources/log4j.properties            |   0
 .../resources/spring/dubbo-consumer.properties     |   4 +-
 .../resources/spring/dubbo-provider.properties     |   9 +-
 .../apache/dubbo/samples/configcenter/ZKTools.java |  16 +--
 .../META-INF/spring/configcenter-consumer.xml      |   2 +-
 .../META-INF/spring/configcenter-provider.xml      |   9 +-
 .../multi-protocols-config-center.properties       |  18 +--
 .../dubbo/samples/configcenter/BasicProvider.java  |   3 +-
 .../apache/dubbo/samples/configcenter/ZKTools.java |  60 ++++++++--
 .../META-INF/spring/configcenter-consumer.xml      |   4 +-
 .../META-INF/spring/configcenter-provider.xml      |   8 +-
 .../src/main/resources/config-center.properties}   |  21 ++--
 dubbo-samples-configcenter/pom.xml                 |   1 +
 dubbo-samples-docker/pom.xml                       |   2 -
 .../apache/dubbo/samples/governance/ZKTools.java   |  44 ++++---
 .../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   |  27 ++++-
 .../main/resources/spring/dubbo-demo-consumer.xml  |   5 +-
 .../main/resources/spring/dubbo-demo-provider.xml  |   2 -
 .../dubbo/samples/governance/BasicConsumer.java    |  13 +-
 .../apache/dubbo/samples/governance/ZKTools.java   |  12 +-
 .../main/resources/spring/dubbo-demo-consumer.xml  |   2 +-
 .../main/resources/spring/dubbo-demo-provider.xml  |   2 +-
 dubbo-samples-mock/pom.xml                         |   7 ++
 .../org/apache/dubbo/samples/mock}/ZKTools.java    |  21 ++--
 .../src/main/resources/spring/mock-consumer.xml    |   3 +-
 .../src/main/resources/spring/mock-provider.xml    |   2 -
 pom.xml                                            |  35 +++++-
 81 files changed, 803 insertions(+), 363 deletions(-)
 copy {dubbo-samples-attachment => dubbo-samples-chain/dubbo-samples-chain-api}/pom.xml (92%)
 copy {dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/java/org/apache/dubbo/samples/annotation => dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance}/ZKTools.java (62%)
 copy dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/api/GreetingsService.java => dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/api/AmericanService.java (85%)
 copy dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/service/AnnotationService.java => dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/api/CatService.java (85%)
 copy dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples/api/GreetingsService.java => dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/api/ChineseService.java (85%)
 copy dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/service/AnnotationService.java => dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/api/DogService.java (85%)
 copy dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/service/AnnotationService.java => dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/api/LionService.java (85%)
 copy dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/service/AnnotationService.java => dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/api/TigerService.java (85%)
 copy {dubbo-samples-annotation => dubbo-samples-chain/dubbo-samples-chain-backend}/pom.xml (86%)
 copy dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/java/org/apache/dubbo/samples/governance/BasicProvider.java => dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/BackendProvider.java (97%)
 copy dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/service/AnnotationServiceImpl.java => dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/impl/CatServiceImpl.java (65%)
 copy dubbo-samples-simplified-registry/dubbo-samples-simplified-registry-annotation/src/main/java/org/apache/dubbo/samples/simplified/annotation/ZKClean.java => dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/impl/DogServiceImpl.java (55%)
 copy dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/service/AnnotationServiceImpl.java => dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/impl/LionServiceImpl.java (65%)
 copy dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/service/AnnotationServiceImpl.java => dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/impl/TigerServiceImpl.java (64%)
 copy {dubbo-samples-simplified-registry/dubbo-samples-simplified-registry-xml => dubbo-samples-chain/dubbo-samples-chain-backend}/src/main/resources/log4j.properties (100%)
 copy {dubbo-samples-governance/dubbo-samples-tagrouter => dubbo-samples-chain/dubbo-samples-chain-backend}/src/main/resources/spring/dubbo-demo-provider.xml (66%)
 copy {dubbo-samples-annotation => dubbo-samples-chain/dubbo-samples-chain-front}/pom.xml (87%)
 create mode 100644 dubbo-samples-chain/dubbo-samples-chain-front/src/main/java/org/apache/dubbo/samples/governance/FrontendConsumer.java
 copy {dubbo-samples-simplified-registry/dubbo-samples-simplified-registry-xml => dubbo-samples-chain/dubbo-samples-chain-front}/src/main/resources/log4j.properties (100%)
 copy {dubbo-samples-governance/dubbo-samples-applevel-override => dubbo-samples-chain/dubbo-samples-chain-front}/src/main/resources/spring/dubbo-demo-consumer.xml (65%)
 copy {dubbo-samples-annotation => dubbo-samples-chain/dubbo-samples-chain-middle}/pom.xml (87%)
 copy dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/java/org/apache/dubbo/samples/governance/BasicProvider.java => dubbo-samples-chain/dubbo-samples-chain-middle/src/main/java/org/apache/dubbo/samples/governance/MiddleEndProvider.java (97%)
 create mode 100644 dubbo-samples-chain/dubbo-samples-chain-middle/src/main/java/org/apache/dubbo/samples/governance/impl/AmericanServiceImpl.java
 create mode 100644 dubbo-samples-chain/dubbo-samples-chain-middle/src/main/java/org/apache/dubbo/samples/governance/impl/ChineseServiceImpl.java
 copy {dubbo-samples-simplified-registry/dubbo-samples-simplified-registry-xml => dubbo-samples-chain/dubbo-samples-chain-middle}/src/main/resources/log4j.properties (100%)
 copy {dubbo-samples-governance/dubbo-samples-configconditionrouter => dubbo-samples-chain/dubbo-samples-chain-middle}/src/main/resources/spring/dubbo-demo-provider.xml (51%)
 copy {dubbo-samples-governance => dubbo-samples-chain}/pom.xml (86%)
 copy dubbo-samples-configcenter/{dubbo-samples-configcenter-externalconfiguration/src/main/resources/yourconfigcenter/dubbo-properties-in-configcenter.properties => dubbo-samples-configcenter-annotation/src/main/resources/config-center.properties} (56%)
 copy dubbo-samples-configcenter/{dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples => dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration}/ZKTools.java (78%)
 copy dubbo-samples-configcenter/{dubbo-samples-configcenter-annotation => dubbo-samples-configcenter-multi-registries}/pom.xml (94%)
 copy dubbo-samples-configcenter/{dubbo-samples-configcenter-annotation => dubbo-samples-configcenter-multi-registries}/src/main/java/org/apache/dubbo/samples/annotation/AnnotationConsumer.java (99%)
 copy {dubbo-samples-annotation => dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries}/src/main/java/org/apache/dubbo/samples/annotation/AnnotationProvider.java (99%)
 copy dubbo-samples-configcenter/{dubbo-samples-configcenter-annotation => dubbo-samples-configcenter-multi-registries}/src/main/java/org/apache/dubbo/samples/annotation/EmbeddedZooKeeper.java (99%)
 copy dubbo-samples-configcenter/{dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples => dubbo-samples-configcenter-multi-registries/src/main/java/org/apache/dubbo/samples/annotation}/ZKTools.java (82%)
 copy dubbo-samples-configcenter/{dubbo-samples-configcenter-annotation => dubbo-samples-configcenter-multi-registries}/src/main/java/org/apache/dubbo/samples/annotation/action/AnnotationAction.java (99%)
 copy {dubbo-samples-spring-hystrix => dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries}/src/main/java/org/apache/dubbo/samples/annotation/api/AnnotationService.java (100%)
 copy dubbo-samples-configcenter/{dubbo-samples-configcenter-annotation => dubbo-samples-configcenter-multi-registries}/src/main/java/org/apache/dubbo/samples/annotation/impl/AnnotationServiceImpl.java (97%)
 copy {dubbo-samples-metadata-report/dubbo-samples-metadata-report-local-xml => dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries}/src/main/resources/log4j.properties (100%)
 copy dubbo-samples-configcenter/{dubbo-samples-configcenter-annotation => dubbo-samples-configcenter-multi-registries}/src/main/resources/spring/dubbo-consumer.properties (89%)
 copy {dubbo-samples-spring-hystrix => dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries}/src/main/resources/spring/dubbo-provider.properties (80%)
 copy dubbo-samples-annotation/src/main/resources/spring/dubbo-consumer.properties => dubbo-samples-configcenter/dubbo-samples-configcenter-multiprotocol/src/main/resources/multi-protocols-config-center.properties (76%)
 copy dubbo-samples-configcenter/{dubbo-samples-configcenter-externalconfiguration/src/main/resources/yourconfigcenter/dubbo-properties-in-configcenter.properties => dubbo-samples-configcenter-xml/src/main/resources/config-center.properties} (62%)
 copy {dubbo-samples-configcenter/dubbo-samples-configcenter-api/src/main/java/org/apache/dubbo/samples => dubbo-samples-mock/src/main/java/org/apache/dubbo/samples/mock}/ZKTools.java (76%)


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

Posted by li...@apache.org.
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>
 
 


[incubator-dubbo-samples] 01/03: make sure different curator and zookeeper versions work together

Posted by li...@apache.org.
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 ee887068f86c003d38f2bbd4f5a3d2b1ea1faae1
Author: ken.lj <ke...@gmail.com>
AuthorDate: Thu Nov 29 17:31:26 2018 +0800

    make sure different curator and zookeeper versions work together
---
 dubbo-samples-docker/pom.xml |  2 --
 pom.xml                      | 30 ++++++++++++++++++++++++++++--
 2 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/dubbo-samples-docker/pom.xml b/dubbo-samples-docker/pom.xml
index c81d611..487732a 100644
--- a/dubbo-samples-docker/pom.xml
+++ b/dubbo-samples-docker/pom.xml
@@ -50,12 +50,10 @@
         <dependency>
             <groupId>org.apache.zookeeper</groupId>
             <artifactId>zookeeper</artifactId>
-            <version>3.4.9</version>
         </dependency>
         <dependency>
             <groupId>org.apache.curator</groupId>
             <artifactId>curator-framework</artifactId>
-            <version>2.12.0</version>
         </dependency>
         <dependency>
             <groupId>org.apache.cxf</groupId>
diff --git a/pom.xml b/pom.xml
index ca96447..9ee8207 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,11 +64,12 @@
         <spring.version>4.3.16.RELEASE</spring.version>
         <dubbo.version>2.7.0-SNAPSHOT</dubbo.version>
         <dubbo.rpc.version>2.7.0-SNAPSHOT</dubbo.rpc.version>
-        <curator.version>2.12.0</curator.version>
+        <zookeeper.version>3.4.13</zookeeper.version>
+        <curator.version>4.0.1</curator.version>
         <validation-api.version>1.1.0.Final</validation-api.version>
         <hibernate-validator.version>4.2.0.Final</hibernate-validator.version>
         <resteasy.version>3.0.19.Final</resteasy.version>
-        <curator-client.version>2.12.0</curator-client.version>
+        <curator-client.version>4.0.1</curator-client.version>
         <swagger.version>1.5.19</swagger.version>
         <tomcat.version>7.0.88</tomcat.version>
         <servlet.version>3.0.1</servlet.version>
@@ -104,9 +105,20 @@
                 <version>${dubbo.rpc.version}</version>
             </dependency>
             <dependency>
+                <groupId>org.apache.zookeeper</groupId>
+                <artifactId>zookeeper</artifactId>
+                <version>${zookeeper.version}</version>
+            </dependency>
+            <dependency>
                 <groupId>org.apache.curator</groupId>
                 <artifactId>curator-framework</artifactId>
                 <version>${curator.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>org.apache.zookeeper</groupId>
+                        <artifactId>zookeeper</artifactId>
+                    </exclusion>
+                </exclusions>
             </dependency>
             <dependency>
                 <groupId>javax.validation</groupId>
@@ -127,6 +139,12 @@
                 <groupId>org.apache.curator</groupId>
                 <artifactId>curator-client</artifactId>
                 <version>${curator-client.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>org.apache.zookeeper</groupId>
+                        <artifactId>zookeeper</artifactId>
+                    </exclusion>
+                </exclusions>
             </dependency>
             <dependency>
                 <groupId>javax.servlet</groupId>
@@ -166,9 +184,17 @@
                     <groupId>io.netty</groupId>
                     <artifactId>netty</artifactId>
                 </exclusion>
+                <exclusion>
+                    <groupId>org.apache.zookeeper</groupId>
+                    <artifactId>zookeeper</artifactId>
+                </exclusion>
             </exclusions>
         </dependency>
         <dependency>
+            <groupId>org.apache.zookeeper</groupId>
+            <artifactId>zookeeper</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo</artifactId>
         </dependency>


[incubator-dubbo-samples] 03/03: update samples for 2.7.0-SNAPSHOT

Posted by li...@apache.org.
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 ad3d8f4f42e94c50746a38157d9c5f3024944cc6
Author: ken.lj <ke...@gmail.com>
AuthorDate: Mon Dec 24 15:10:10 2018 +0800

    update samples for 2.7.0-SNAPSHOT
---
 .../dubbo-samples-chain-api}/pom.xml               |  4 +-
 .../apache/dubbo/samples/governance/ZKTools.java   | 32 +++----------
 .../samples/governance/api/AmericanService.java    |  0
 .../dubbo/samples/governance/api/CatService.java   |  0
 .../samples/governance/api/ChineseService.java     |  0
 .../dubbo/samples/governance/api/DogService.java   |  0
 .../dubbo/samples/governance/api/LionService.java  |  0
 .../dubbo/samples/governance/api/TigerService.java |  0
 .../dubbo-samples-chain-backend}/pom.xml           |  6 +--
 .../dubbo/samples/governance/BackendProvider.java  |  0
 .../samples/governance/impl/CatServiceImpl.java    |  2 +
 .../samples/governance/impl/DogServiceImpl.java    |  7 +++
 .../samples/governance/impl/LionServiceImpl.java   |  2 +
 .../samples/governance/impl/TigerServiceImpl.java  |  2 +
 .../src/main/resources/log4j.properties            |  0
 .../main/resources/spring/dubbo-demo-provider.xml  |  8 +---
 .../dubbo-samples-chain-front}/pom.xml             |  6 +--
 .../dubbo/samples/governance/FrontendConsumer.java | 50 +++++++++++++--------
 .../src/main/resources/log4j.properties            |  0
 .../main/resources/spring/dubbo-demo-consumer.xml  |  4 +-
 .../dubbo-samples-chain-middle}/pom.xml            |  6 +--
 .../samples/governance/MiddleEndProvider.java      |  0
 .../governance/impl/AmericanServiceImpl.java       |  0
 .../governance/impl/ChineseServiceImpl.java        |  0
 .../src/main/resources/log4j.properties            |  0
 .../main/resources/spring/dubbo-demo-provider.xml  |  8 +---
 .../pom.xml                                        | 10 ++---
 .../samples/annotation/AnnotationConsumer.java     |  5 ++-
 .../src/main/resources/config-center.properties}   | 27 ++++++-----
 .../resources/spring/dubbo-consumer.properties     |  7 +--
 .../resources/spring/dubbo-provider.properties     |  5 ++-
 .../consumer/AnnotationConsumer.java               |  4 +-
 .../provider/AnnotationProvider.java               |  4 +-
 .../spring/MyEnvironmentPostProcessor.java         | 13 ++++--
 .../dubbo-properties-in-configcenter.properties    |  1 -
 .../resources/spring/dubbo-consumer.properties     |  4 +-
 .../resources/spring/dubbo-provider.properties     | 10 ++---
 .../apache/dubbo/samples/configcenter/ZKTools.java | 28 +-----------
 .../META-INF/spring/configcenter-consumer.xml      |  2 +-
 .../META-INF/spring/configcenter-provider.xml      |  4 +-
 .../multi-protocols-config-center.properties}      | 20 ++++-----
 .../dubbo/samples/configcenter/BasicProvider.java  |  1 +
 .../apache/dubbo/samples/configcenter/ZKTools.java | 52 +++++++++++++++++++++-
 .../META-INF/spring/configcenter-consumer.xml      |  4 +-
 .../META-INF/spring/configcenter-provider.xml      |  6 ++-
 .../src/main/resources/config-center.properties}   | 21 ++++-----
 .../apache/dubbo/samples/governance/ZKTools.java   | 21 ++++++++-
 .../main/resources/spring/dubbo-demo-consumer.xml  |  2 +-
 .../main/resources/spring/dubbo-demo-provider.xml  |  2 +-
 .../apache/dubbo/samples/governance/ZKTools.java   | 20 ++++++++-
 .../dubbo/samples/governance/BasicConsumer.java    |  6 ++-
 dubbo-samples-mock/pom.xml                         |  7 +++
 .../org/apache/dubbo/samples/mock}/ZKTools.java    | 18 ++------
 .../src/main/resources/spring/mock-consumer.xml    |  3 +-
 .../src/main/resources/spring/mock-provider.xml    |  2 -
 pom.xml                                            |  2 +-
 56 files changed, 252 insertions(+), 196 deletions(-)

diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-api/pom.xml b/dubbo-samples-chain/dubbo-samples-chain-api/pom.xml
similarity index 91%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-api/pom.xml
rename to dubbo-samples-chain/dubbo-samples-chain-api/pom.xml
index 8bfa596..f5e3164 100644
--- a/dubbo-samples-concurrency/dubbo-samples-concurrency-api/pom.xml
+++ b/dubbo-samples-chain/dubbo-samples-chain-api/pom.xml
@@ -22,13 +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-concurrency</artifactId>
+        <artifactId>dubbo-samples-chain</artifactId>
         <groupId>org.apache.dubbo</groupId>
         <version>1.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>dubbo-samples-concurrency-api</artifactId>
+    <artifactId>dubbo-samples-chain-api</artifactId>
     <dependencies>
         <dependency>
             <groupId>org.springframework</groupId>
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java b/dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
similarity index 79%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
rename to dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
index 7a6f1ae..b91b56b 100644
--- a/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
+++ b/dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
@@ -32,8 +32,7 @@ public class ZKTools {
         client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", 60 * 1000, 60 * 1000, new ExponentialBackoffRetry(1000, 3));
         client.start();
 
-//        configuratorsApp();
-        configuratorsAppConsumer();
+        configuratorsApp();
 
         System.in.read();
     }
@@ -43,24 +42,7 @@ public class ZKTools {
     }
 
     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/concurrency-middle/configurators";
-            if (client.checkExists().forPath(path) == null) {
-                client.create().creatingParentsIfNeeded().forPath(path);
-            }
-            setData(path, str);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    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";
+        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\n" + "- addresses: [\"0.0.0.0:20881\"]\n" + "  side: provider\n" + "  parameters:\n" + "    timeout: 4000";
 
         System.out.println(str);
 
@@ -75,13 +57,13 @@ public class ZKTools {
         }
     }
 
-    private void configuratorsService() {
-        String str = "";
+    private void tags() {
+        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/governance-tagrouter-provider/configurators";
+            String path = "/dubbo/config/governance-tagrouter-provider/tagrouters";
             if (client.checkExists().forPath(path) == null) {
                 client.create().creatingParentsIfNeeded().forPath(path);
             }
@@ -91,10 +73,6 @@ public class ZKTools {
         }
     }
 
-    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" + "...";
 
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/AmericanService.java b/dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/api/AmericanService.java
similarity index 100%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/AmericanService.java
rename to dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/api/AmericanService.java
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/CatService.java b/dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/api/CatService.java
similarity index 100%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/CatService.java
rename to dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/api/CatService.java
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/ChineseService.java b/dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/api/ChineseService.java
similarity index 100%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/ChineseService.java
rename to dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/api/ChineseService.java
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/DogService.java b/dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/api/DogService.java
similarity index 100%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/DogService.java
rename to dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/api/DogService.java
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/LionService.java b/dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/api/LionService.java
similarity index 100%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/LionService.java
rename to dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/api/LionService.java
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/TigerService.java b/dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/api/TigerService.java
similarity index 100%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-api/src/main/java/org/apache/dubbo/samples/governance/api/TigerService.java
rename to dubbo-samples-chain/dubbo-samples-chain-api/src/main/java/org/apache/dubbo/samples/governance/api/TigerService.java
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-front/pom.xml b/dubbo-samples-chain/dubbo-samples-chain-backend/pom.xml
similarity index 88%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-front/pom.xml
rename to dubbo-samples-chain/dubbo-samples-chain-backend/pom.xml
index 9d5b9f7..257b19c 100644
--- a/dubbo-samples-concurrency/dubbo-samples-concurrency-front/pom.xml
+++ b/dubbo-samples-chain/dubbo-samples-chain-backend/pom.xml
@@ -22,13 +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-concurrency</artifactId>
+        <artifactId>dubbo-samples-chain</artifactId>
         <groupId>org.apache.dubbo</groupId>
         <version>1.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>dubbo-samples-concurrency-front</artifactId>
+    <artifactId>dubbo-samples-chain-backend</artifactId>
     <dependencies>
         <dependency>
             <groupId>org.springframework</groupId>
@@ -36,7 +36,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-samples-concurrency-api</artifactId>
+            <artifactId>dubbo-samples-chain-api</artifactId>
             <version>${project.version}</version>
         </dependency>
     </dependencies>
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/BackendProvider.java b/dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/BackendProvider.java
similarity index 100%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/BackendProvider.java
rename to dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/BackendProvider.java
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/CatServiceImpl.java b/dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/impl/CatServiceImpl.java
similarity index 93%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/CatServiceImpl.java
rename to dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/impl/CatServiceImpl.java
index 9e4aa57..561c3ce 100644
--- a/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/CatServiceImpl.java
+++ b/dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/impl/CatServiceImpl.java
@@ -29,11 +29,13 @@ public class CatServiceImpl implements CatService {
 
     @Override
     public String getName() {
+        System.out.println("I am a Cat!");
         return "I am a Cat!";
     }
 
     @Override
     public String cat() {
+        System.out.println("Meow Meow!");
         return "Meow Meow!";
     }
 }
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/DogServiceImpl.java b/dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/impl/DogServiceImpl.java
similarity index 86%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/DogServiceImpl.java
rename to dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/impl/DogServiceImpl.java
index 91c6ab2..0268c9c 100644
--- a/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/DogServiceImpl.java
+++ b/dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/impl/DogServiceImpl.java
@@ -34,11 +34,18 @@ public class DogServiceImpl implements DogService {
         } catch (InterruptedException e) {
             e.printStackTrace();
         }
+        System.out.println("I am a Dog!");
         return "I am a Dog!";
     }
 
     @Override
     public String dog() {
+        try {
+            Thread.sleep(200);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        System.out.println("Woof Woof!");
         return "Woof Woof!";
     }
 }
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/LionServiceImpl.java b/dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/impl/LionServiceImpl.java
similarity index 93%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/LionServiceImpl.java
rename to dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/impl/LionServiceImpl.java
index a2046fa..d1294c1 100644
--- a/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/LionServiceImpl.java
+++ b/dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/impl/LionServiceImpl.java
@@ -29,11 +29,13 @@ public class LionServiceImpl implements LionService {
 
     @Override
     public String getName() {
+        System.out.println("I am a Lion!");
         return "I am a Lion!";
     }
 
     @Override
     public String lion() {
+        System.out.println("Lion Lion!");
         return "Lion Lion!";
     }
 }
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/TigerServiceImpl.java b/dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/impl/TigerServiceImpl.java
similarity index 93%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/TigerServiceImpl.java
rename to dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/impl/TigerServiceImpl.java
index 40b71cd..828f826 100644
--- a/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/java/org/apache/dubbo/samples/governance/impl/TigerServiceImpl.java
+++ b/dubbo-samples-chain/dubbo-samples-chain-backend/src/main/java/org/apache/dubbo/samples/governance/impl/TigerServiceImpl.java
@@ -29,11 +29,13 @@ public class TigerServiceImpl implements TigerService {
 
     @Override
     public String getName() {
+        System.out.println("I am a Tiger!");
         return "I am a Tiger!";
     }
 
     @Override
     public String tiger() {
+        System.out.println("Tiger Tiger!");
         return "Tiger Tiger!";
     }
 }
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/resources/log4j.properties b/dubbo-samples-chain/dubbo-samples-chain-backend/src/main/resources/log4j.properties
similarity index 100%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/resources/log4j.properties
rename to dubbo-samples-chain/dubbo-samples-chain-backend/src/main/resources/log4j.properties
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/resources/spring/dubbo-demo-provider.xml b/dubbo-samples-chain/dubbo-samples-chain-backend/src/main/resources/spring/dubbo-demo-provider.xml
similarity index 90%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/resources/spring/dubbo-demo-provider.xml
rename to dubbo-samples-chain/dubbo-samples-chain-backend/src/main/resources/spring/dubbo-demo-provider.xml
index a91c98c..5a6c777 100644
--- a/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/resources/spring/dubbo-demo-provider.xml
+++ b/dubbo-samples-chain/dubbo-samples-chain-backend/src/main/resources/spring/dubbo-demo-provider.xml
@@ -26,14 +26,10 @@
 
     <!-- optional provider's application name, used for tracing dependency relationship -->
     <dubbo:application name="concurrency-backend"/>
-
-    <!-- optional -->
     <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:protocol port="-1"/>
 
-    <!--optional, use dubbo protocol to export service on port 20880 -->
-    <dubbo:protocol name="dubbo" port="-1"/>
-
-    <dubbo:config-center enable="false" address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:config-center address="zookeeper://127.0.0.1:2181"/>
 
     <bean id="catService" class="org.apache.dubbo.samples.governance.impl.CatServiceImpl"/>
     <dubbo:service interface="org.apache.dubbo.samples.governance.api.CatService" ref="catService"/>
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/pom.xml b/dubbo-samples-chain/dubbo-samples-chain-front/pom.xml
similarity index 88%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-middle/pom.xml
rename to dubbo-samples-chain/dubbo-samples-chain-front/pom.xml
index 58dd3c9..2007464 100644
--- a/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/pom.xml
+++ b/dubbo-samples-chain/dubbo-samples-chain-front/pom.xml
@@ -22,13 +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-concurrency</artifactId>
+        <artifactId>dubbo-samples-chain</artifactId>
         <groupId>org.apache.dubbo</groupId>
         <version>1.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>dubbo-samples-concurrency-middle</artifactId>
+    <artifactId>dubbo-samples-chain-front</artifactId>
     <dependencies>
         <dependency>
             <groupId>org.springframework</groupId>
@@ -36,7 +36,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-samples-concurrency-api</artifactId>
+            <artifactId>dubbo-samples-chain-api</artifactId>
             <version>${project.version}</version>
         </dependency>
     </dependencies>
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-front/src/main/java/org/apache/dubbo/samples/governance/FrontendConsumer.java b/dubbo-samples-chain/dubbo-samples-chain-front/src/main/java/org/apache/dubbo/samples/governance/FrontendConsumer.java
similarity index 70%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-front/src/main/java/org/apache/dubbo/samples/governance/FrontendConsumer.java
rename to dubbo-samples-chain/dubbo-samples-chain-front/src/main/java/org/apache/dubbo/samples/governance/FrontendConsumer.java
index fb614d2..6aa54f6 100644
--- a/dubbo-samples-concurrency/dubbo-samples-concurrency-front/src/main/java/org/apache/dubbo/samples/governance/FrontendConsumer.java
+++ b/dubbo-samples-chain/dubbo-samples-chain-front/src/main/java/org/apache/dubbo/samples/governance/FrontendConsumer.java
@@ -19,6 +19,8 @@
 
 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.AmericanService;
 import org.apache.dubbo.samples.governance.api.CatService;
 import org.apache.dubbo.samples.governance.api.ChineseService;
@@ -35,24 +37,19 @@ public class FrontendConsumer {
 
     private static ExecutorService executorService = Executors.newFixedThreadPool(3);
 
-    private static long interval = 5000;
+    private static long interval = 200;
 
     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);
+        dog(context);
 //                tiger(context);
 //                lion(context);
-                chinese(context);
-                american(context);
-            } catch (Throwable throwable) {
-                throwable.printStackTrace();
-            }
-        }
+//        chinese(context);
+//        american(context);
 
     }
 
@@ -69,9 +66,14 @@ public class FrontendConsumer {
     public static void dog(ClassPathXmlApplicationContext context) {
         executorService.submit(() -> {
             while (true) {
-                DogService dogService = (DogService) context.getBean("dogService");
-                System.out.println(dogService.dog());
-                Thread.sleep(interval);
+                try {
+                    RpcContext.getContext().setAttachment(Constants.TAG_KEY, "tag1");
+                    DogService dogService = (DogService) context.getBean("dogService");
+                    System.out.println(dogService.dog());
+                    Thread.sleep(interval);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
             }
         });
     }
@@ -99,9 +101,14 @@ public class FrontendConsumer {
     public static void chinese(ClassPathXmlApplicationContext context) {
         executorService.submit(() -> {
             while (true) {
-                ChineseService chineseService = (ChineseService) context.getBean("chineseService");
-                System.out.println(chineseService.eat());
-                Thread.sleep(interval);
+                try {
+                    RpcContext.getContext().setAttachment(Constants.TAG_KEY, "tag1");
+                    ChineseService chineseService = (ChineseService) context.getBean("chineseService");
+                    System.out.println(chineseService.eat());
+                    Thread.sleep(interval);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
             }
         });
     }
@@ -109,9 +116,14 @@ public class FrontendConsumer {
     public static void american(ClassPathXmlApplicationContext context) {
         executorService.submit(() -> {
             while (true) {
-                AmericanService americanService = (AmericanService) context.getBean("americanService");
-                System.out.println(americanService.eat());
-                Thread.sleep(interval);
+                try {
+                    RpcContext.getContext().setAttachment(Constants.TAG_KEY, "tag1");
+                    AmericanService americanService = (AmericanService) context.getBean("americanService");
+                    System.out.println(americanService.eat());
+                    Thread.sleep(interval);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
             }
         });
     }
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-front/src/main/resources/log4j.properties b/dubbo-samples-chain/dubbo-samples-chain-front/src/main/resources/log4j.properties
similarity index 100%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-front/src/main/resources/log4j.properties
rename to dubbo-samples-chain/dubbo-samples-chain-front/src/main/resources/log4j.properties
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-front/src/main/resources/spring/dubbo-demo-consumer.xml b/dubbo-samples-chain/dubbo-samples-chain-front/src/main/resources/spring/dubbo-demo-consumer.xml
similarity index 93%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-front/src/main/resources/spring/dubbo-demo-consumer.xml
rename to dubbo-samples-chain/dubbo-samples-chain-front/src/main/resources/spring/dubbo-demo-consumer.xml
index fdcecdb..333c3e3 100644
--- a/dubbo-samples-concurrency/dubbo-samples-concurrency-front/src/main/resources/spring/dubbo-demo-consumer.xml
+++ b/dubbo-samples-chain/dubbo-samples-chain-front/src/main/resources/spring/dubbo-demo-consumer.xml
@@ -27,11 +27,9 @@
     <!-- optional, consumer's application name, used for tracing dependency relationship (not a matching criterion),
     don't set it same as provider -->
     <dubbo:application name="concurrency-front"/>
-
-    <!-- optional, use multicast registry center to discover service -->
     <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
 
-    <dubbo:config-center enable="false" 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 -->
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/pom.xml b/dubbo-samples-chain/dubbo-samples-chain-middle/pom.xml
similarity index 88%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-backend/pom.xml
rename to dubbo-samples-chain/dubbo-samples-chain-middle/pom.xml
index 2f3a749..b0b0ff7 100644
--- a/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/pom.xml
+++ b/dubbo-samples-chain/dubbo-samples-chain-middle/pom.xml
@@ -22,13 +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-concurrency</artifactId>
+        <artifactId>dubbo-samples-chain</artifactId>
         <groupId>org.apache.dubbo</groupId>
         <version>1.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>dubbo-samples-concurrency-backend</artifactId>
+    <artifactId>dubbo-samples-chain-middle</artifactId>
     <dependencies>
         <dependency>
             <groupId>org.springframework</groupId>
@@ -36,7 +36,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.dubbo</groupId>
-            <artifactId>dubbo-samples-concurrency-api</artifactId>
+            <artifactId>dubbo-samples-chain-api</artifactId>
             <version>${project.version}</version>
         </dependency>
     </dependencies>
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/java/org/apache/dubbo/samples/governance/MiddleEndProvider.java b/dubbo-samples-chain/dubbo-samples-chain-middle/src/main/java/org/apache/dubbo/samples/governance/MiddleEndProvider.java
similarity index 100%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/java/org/apache/dubbo/samples/governance/MiddleEndProvider.java
rename to dubbo-samples-chain/dubbo-samples-chain-middle/src/main/java/org/apache/dubbo/samples/governance/MiddleEndProvider.java
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/java/org/apache/dubbo/samples/governance/impl/AmericanServiceImpl.java b/dubbo-samples-chain/dubbo-samples-chain-middle/src/main/java/org/apache/dubbo/samples/governance/impl/AmericanServiceImpl.java
similarity index 100%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/java/org/apache/dubbo/samples/governance/impl/AmericanServiceImpl.java
rename to dubbo-samples-chain/dubbo-samples-chain-middle/src/main/java/org/apache/dubbo/samples/governance/impl/AmericanServiceImpl.java
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/java/org/apache/dubbo/samples/governance/impl/ChineseServiceImpl.java b/dubbo-samples-chain/dubbo-samples-chain-middle/src/main/java/org/apache/dubbo/samples/governance/impl/ChineseServiceImpl.java
similarity index 100%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/java/org/apache/dubbo/samples/governance/impl/ChineseServiceImpl.java
rename to dubbo-samples-chain/dubbo-samples-chain-middle/src/main/java/org/apache/dubbo/samples/governance/impl/ChineseServiceImpl.java
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/resources/log4j.properties b/dubbo-samples-chain/dubbo-samples-chain-middle/src/main/resources/log4j.properties
similarity index 100%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-backend/src/main/resources/log4j.properties
rename to dubbo-samples-chain/dubbo-samples-chain-middle/src/main/resources/log4j.properties
diff --git a/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/resources/spring/dubbo-demo-provider.xml b/dubbo-samples-chain/dubbo-samples-chain-middle/src/main/resources/spring/dubbo-demo-provider.xml
similarity index 92%
rename from dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/resources/spring/dubbo-demo-provider.xml
rename to dubbo-samples-chain/dubbo-samples-chain-middle/src/main/resources/spring/dubbo-demo-provider.xml
index 135405b..b760308 100644
--- a/dubbo-samples-concurrency/dubbo-samples-concurrency-middle/src/main/resources/spring/dubbo-demo-provider.xml
+++ b/dubbo-samples-chain/dubbo-samples-chain-middle/src/main/resources/spring/dubbo-demo-provider.xml
@@ -28,14 +28,10 @@
 
     <!-- optional provider's application name, used for tracing dependency relationship -->
     <dubbo:application name="concurrency-middle"/>
-
-    <!-- optional -->
     <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:protocol port="-1"/>
 
-    <!--optional, use dubbo protocol to export service on port 20880 -->
-    <dubbo:protocol name="dubbo" port="-1"/>
-
-    <dubbo:config-center enable="false" 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 -->
diff --git a/dubbo-samples-concurrency/pom.xml b/dubbo-samples-chain/pom.xml
similarity index 86%
rename from dubbo-samples-concurrency/pom.xml
rename to dubbo-samples-chain/pom.xml
index d735351..bf081b3 100644
--- a/dubbo-samples-concurrency/pom.xml
+++ b/dubbo-samples-chain/pom.xml
@@ -28,13 +28,13 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <packaging>pom</packaging>
-    <artifactId>dubbo-samples-concurrency</artifactId>
+    <artifactId>dubbo-samples-chain</artifactId>
 
     <modules>
-        <module>dubbo-samples-concurrency-api</module>
-        <module>dubbo-samples-concurrency-front</module>
-        <module>dubbo-samples-concurrency-middle</module>
-        <module>dubbo-samples-concurrency-backend</module>
+        <module>dubbo-samples-chain-api</module>
+        <module>dubbo-samples-chain-front</module>
+        <module>dubbo-samples-chain-middle</module>
+        <module>dubbo-samples-chain-backend</module>
     </modules>
 
     <dependencies>
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/java/org/apache/dubbo/samples/annotation/AnnotationConsumer.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/java/org/apache/dubbo/samples/annotation/AnnotationConsumer.java
index ff80068..0f99d52 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/java/org/apache/dubbo/samples/annotation/AnnotationConsumer.java
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/java/org/apache/dubbo/samples/annotation/AnnotationConsumer.java
@@ -21,6 +21,7 @@ package org.apache.dubbo.samples.annotation;
 
 import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
 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;
@@ -37,11 +38,11 @@ public class AnnotationConsumer {
         final AnnotationAction annotationAction = (AnnotationAction) context.getBean("annotationAction");
         String hello = annotationAction.doSayHello("world");
         System.out.println("result :" + hello);
-        System.in.read();
+        Thread.sleep(10000000);
     }
 
     @Configuration
-    @EnableDubbo(scanBasePackages = "org.apache.dubbo.samples.annotation.action")
+    @EnableDubbo(scanBasePackages = "org.apache.dubbo.samples.annotation.action", multipleConfig = true)
     @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/resources/yourconfigcenter/dubbo-properties-in-configcenter.properties b/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/config-center.properties
similarity index 56%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/resources/yourconfigcenter/dubbo-properties-in-configcenter.properties
copy to dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/config-center.properties
index 180ca9f..62a16a1 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/resources/yourconfigcenter/dubbo-properties-in-configcenter.properties
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-annotation/src/main/resources/config-center.properties
@@ -1,24 +1,29 @@
-#
-#
 #   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.
-#  
-#
-dubbo.application.name=configcenter-annotation-demo
-dubbo.configcenter.address=zookeeper://127.0.0.1:2181
+# Add the following global external properties to `/dubbo/config/dubbo/dubbo.properties`
 dubbo.registry.address=zookeeper://127.0.0.1:2181
-dubbo.protocol.name=dubbo
-dubbo.protocol.port=20880
-dubbo.consumer.timeout=3000
\ No newline at end of file
+#global config for consumer
+dubbo.consumer.loadbalance=random
+#global config for provider
+dubbo.protocol.port=20990
+dubbo.provider.timeout=5000
+dubbo.registryData.simpleConsumerConfig=true
+# Optional. Add the following application(Provider) specific external properties
+# to `/dubbo/config/configcenter-annotation-provider/dubbo.properties`
+dubbo.protocol.threadpool=fixed
+dubbo.protocol.threads=100
+# Optional. Add the following application(Consumer) specific external properties
+# to `/dubbo/config/configcenter-annotation-consumer/dubbo.properties`
+dubbo.consumer.timeout=6666
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 fa5da7e..61b3eed 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
@@ -16,9 +16,10 @@
 #   limitations under the License.
 #  
 #
-dubbo.application.name=configcenter-annotation-provider
-dubbo.config-center.address=zookeeper://127.0.0.1:2181
-dubbo.config-center.configfile=dubbo.properties
+dubbo.applications.configcenter-annotation-provider.name=configcenter-annotation-provider
+dubbo.configCenters.zookeeper.address=zookeeper://127.0.0.1:2181
+dubbo.configCenters.zookeeper.configfile=dubbo.properties
+dubbo.configCenters.zookeeper.highestPriority=true
 # 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 bb7d957..5d47905 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,9 @@
 #  
 #
 dubbo.application.name=configcenter-annotation-provider
-dubbo.config-center.address=zookeeper://127.0.0.1:2181
-dubbo.config-center.configfile=dubbo.properties
+dubbo.configCenter.address=zookeeper://127.0.0.1:2181
+dubbo.configCenter.configFile=dubbo.properties
+dubbo.configCenter.highestPriority=true
 # 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-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 ae5a7ee..4c80a62 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
@@ -57,8 +57,8 @@ public class AnnotationConsumer {
             ConfigCenterBean configCenterBean = new ConfigCenterBean();
             // 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
+            configCenterBean.setConfigFile("dubbo.properties");// by default is dubbo.properties
+            configCenterBean.setAppConfigFile("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 2ad582b..fd0ca76 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
@@ -57,8 +57,8 @@ public class AnnotationProvider {
             ConfigCenterBean configCenterBean = new ConfigCenterBean();
             // 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
+            configCenterBean.setConfigFile("dubbo.properties");// by default is dubbo.properties
+            configCenterBean.setAppConfigFile("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/spring/MyEnvironmentPostProcessor.java b/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/java/org/apache/dubbo/samples/externalconfiguration/spring/MyEnvironmentPostProcessor.java
index 173afce..7ab7257 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
@@ -46,14 +46,19 @@ public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {
             environment.getPropertySources().addLast(dubboPropertySource);
 
             Map<String, Object> appDubboProperties = new HashMap<>();
-            BufferedReader appReader = new BufferedReader(new InputStreamReader(MyEnvironmentPostProcessor.class.getResourceAsStream("/yourconfigcenter/dubbo-properties-in-configcenter-provider.properties")));
+            BufferedReader appReader;
             String appName = application.getMainApplicationClass().getSimpleName();
             if (appName.contains("consumer")) {
                 appReader = new BufferedReader(new InputStreamReader(MyEnvironmentPostProcessor.class.getResourceAsStream("/yourconfigcenter/dubbo-properties-in-configcenter-consumer.properties")));
+                appDubboProperties.put("configcenter-annotation-consumer.dubbo.properties", appReader.lines().collect(Collectors.joining("\n")));
+                MapPropertySource appDubboPropertySource = new MapPropertySource("configcenter-annotation-consumer.dubbo.properties", appDubboProperties);
+                environment.getPropertySources().addLast(appDubboPropertySource);
+            } else {
+                appReader = new BufferedReader(new InputStreamReader(MyEnvironmentPostProcessor.class.getResourceAsStream("/yourconfigcenter/dubbo-properties-in-configcenter-provider.properties")));
+                appDubboProperties.put("configcenter-annotation-provider.dubbo.properties", appReader.lines().collect(Collectors.joining("\n")));
+                MapPropertySource appDubboPropertySource = new MapPropertySource("configcenter-annotation-provider.dubbo.properties", appDubboProperties);
+                environment.getPropertySources().addLast(appDubboPropertySource);
             }
-            appDubboProperties.put("application.dubbo.properties", appReader.lines().collect(Collectors.joining("\n")));
-            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-externalconfiguration/src/main/resources/yourconfigcenter/dubbo-properties-in-configcenter.properties b/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/resources/yourconfigcenter/dubbo-properties-in-configcenter.properties
index 180ca9f..eee0ec6 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/resources/yourconfigcenter/dubbo-properties-in-configcenter.properties
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/resources/yourconfigcenter/dubbo-properties-in-configcenter.properties
@@ -16,7 +16,6 @@
 #   limitations under the License.
 #  
 #
-dubbo.application.name=configcenter-annotation-demo
 dubbo.configcenter.address=zookeeper://127.0.0.1:2181
 dubbo.registry.address=zookeeper://127.0.0.1:2181
 dubbo.protocol.name=dubbo
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/resources/spring/dubbo-consumer.properties b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/resources/spring/dubbo-consumer.properties
index fa5da7e..c474256 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/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.config-center.address=zookeeper://127.0.0.1:2181
-dubbo.config-center.configfile=dubbo.properties
+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
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/resources/spring/dubbo-provider.properties b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/resources/spring/dubbo-provider.properties
index bb7d957..333e3fb 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/resources/spring/dubbo-provider.properties
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-multi-registries/src/main/resources/spring/dubbo-provider.properties
@@ -17,10 +17,6 @@
 #  
 #
 dubbo.application.name=configcenter-annotation-provider
-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
-#dubbo.protocol.name=dubbo
-#dubbo.protocol.port=20880
\ No newline at end of file
+dubbo.configCenter.address=zookeeper://127.0.0.1:2181
+dubbo.configCenter.configfile=dubbo.properties
+dubbo.registries.registry1.address=xxx
\ No newline at end of file
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 4cf3931..5bed08f 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
@@ -32,35 +32,11 @@ 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();
+        generateDubboPropertiesForGlobal();
     }
 
     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);
-
-        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.dubbo1.name=dubbo\n" + "dubbo.protocols.dubbo1.port=20991\n" +
-                "\n" + "dubbo.protocols.hessian1.name=hessian\n" + "dubbo.protocols.hessian1.port=8089";
+        String str = "#key: dubbo.{item-name}.{id}.{property}\n" + "dubbo.registry.address=zookeeper://127.0.0.1:2181\n" + "dubbo.protocols.dubbo1.name=dubbo\n" + "dubbo.protocols.dubbo1.port=20991\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 0c56766..e330a49 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:config-center address="zookeeper://127.0.0.1:2181" configfile="dubbo.properties"/>
+    <dubbo:config-center address="zookeeper://127.0.0.1:2181"/>
 
     <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 163acc0..a6e1284 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
@@ -28,10 +28,8 @@
 
     <dubbo:config-center address="zookeeper://127.0.0.1:2181"/>
 
-    <dubbo:provider protocol="hessian1"/>
-
     <bean id="demoService" class="org.apache.dubbo.samples.configcenter.impl.DemoServiceImpl"/>
-    <dubbo:service interface="org.apache.dubbo.samples.configcenter.api.DemoService"
+    <dubbo:service protocol="hessian1" interface="org.apache.dubbo.samples.configcenter.api.DemoService"
                    ref="demoService"/>
     <dubbo:service protocol="dubbo1" interface="org.apache.dubbo.samples.configcenter.api.DemoService"
                    ref="demoService"/>
diff --git a/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/resources/yourconfigcenter/dubbo-properties-in-configcenter.properties b/dubbo-samples-configcenter/dubbo-samples-configcenter-multiprotocol/src/main/resources/multi-protocols-config-center.properties
similarity index 75%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/resources/yourconfigcenter/dubbo-properties-in-configcenter.properties
copy to dubbo-samples-configcenter/dubbo-samples-configcenter-multiprotocol/src/main/resources/multi-protocols-config-center.properties
index 180ca9f..0087bbe 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/resources/yourconfigcenter/dubbo-properties-in-configcenter.properties
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-multiprotocol/src/main/resources/multi-protocols-config-center.properties
@@ -1,24 +1,22 @@
-#
-#
 #   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.
-#  
-#
-dubbo.application.name=configcenter-annotation-demo
-dubbo.configcenter.address=zookeeper://127.0.0.1:2181
+# Add the following global external properties to `/dubbo/config/dubbo/dubbo.properties`
+#key: dubbo.{item-name}.{id}.{property}
 dubbo.registry.address=zookeeper://127.0.0.1:2181
-dubbo.protocol.name=dubbo
-dubbo.protocol.port=20880
-dubbo.consumer.timeout=3000
\ No newline at end of file
+dubbo.protocols.dubbo1.name=dubbo
+dubbo.protocols.dubbo1.port=20991
+dubbo.protocols.hessian1.name=hessian
+dubbo.protocols.hessian1.port=8089
+
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 ccc6002..8172dce 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
@@ -26,6 +26,7 @@ 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.registerShutdownHook();
         context.start();
 
         System.in.read(); // press any key to exit
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 93f3199..cfa3bca 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
@@ -21,6 +21,7 @@ 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.zookeeper.data.Stat;
 
 /**
  *
@@ -39,7 +40,7 @@ public class ZKTools {
     }
 
     public static void generateDubboPropertiesForGlobal() {
-        String str = "";
+        String str = "dubbo.registry.address=zookeeper://127.0.0.1:2181\n" + "dubbo.metadataReport.address=zookeeper://127.0.0.1:2181\n" + "dubbo.protocol.port=-1\n" + "dubbo.registryData.simpleProviderConfig=true\n" + "dubbo.registryData.simpleConsumerConfig=true\n";
 
         System.out.println(str);
 
@@ -72,6 +73,14 @@ public class ZKTools {
         }
     }
 
+    private static void createNode(String path) throws Exception {
+        client.create().forPath(path);
+    }
+
+    private static void deleteNode(String path) throws Exception {
+        client.delete().forPath(path);
+    }
+
     private static void setData(String path, String data) throws Exception {
         client.setData().forPath(path, data.getBytes());
     }
@@ -83,4 +92,45 @@ public class ZKTools {
         return path.replace("/dubbo/config/", "").replaceAll("/", ".");
     }
 
+    public static void quickOnlineOfline() {
+        String providerUrl = "dubbo%3A%2F%2F30.5.120.251%3A20880%2Forg.apache.dubbo.samples.configcenter.api.DemoService%3Fapplication%3Dconfigcenter-provider%26dubbo%3D2.0.2%26group%3Dtest2%26specVersion%3D2.7.0-SNAPSHOT%26timestamp%3D1545282828049";
+
+        new Thread() {
+            @Override
+            public void run() {
+                try {
+                    while (true) {
+                        createNode("/dubbo/org.apache.dubbo.samples.configcenter.api.DemoService/providers/" + providerUrl);
+                        Stat stat = client.checkExists().forPath("/dubbo/org.apache.dubbo.samples.configcenter.api.DemoService/providers/" + providerUrl);
+                        if (stat != null) {
+                            deleteNode("/dubbo/org.apache.dubbo.samples.configcenter.api.DemoService/providers/" + providerUrl);
+                        }
+                        Thread.sleep(20);
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }.start();
+
+        new Thread() {
+            @Override
+            public void run() {
+                while (true) {
+                    try {
+                        Thread.sleep(100);
+                        Stat stat = client.checkExists().forPath("/dubbo/org.apache.dubbo.samples.configcenter.api.DemoService/providers/" + providerUrl);
+                        if (stat != null) {
+                            deleteNode("/dubbo/org.apache.dubbo.samples.configcenter.api.DemoService/providers/" + providerUrl);
+                        }
+                        Thread.sleep(10);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }.start();
+
+    }
+
 }
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 d5331fb..755e58c 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,8 +27,8 @@
     <!-- optional -->
     <dubbo:application name="configcenter-consumer"/>
 
-    <dubbo:config-center address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:config-center highest-priority="false" address="zookeeper://127.0.0.1:2181"/>
 
-    <dubbo:reference id="demoService" interface="org.apache.dubbo.samples.configcenter.api.DemoService"/>
+    <dubbo:reference group="*" id="demoService" interface="org.apache.dubbo.samples.configcenter.api.DemoService"/>
 
 </beans>
\ No newline at end of file
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 669f90d..b29e040 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,11 @@
     <!-- optional -->
     <dubbo:application name="configcenter-provider"/>
 
+    <!--<dubbo:registry address="zookeeper://127.0.0.1:2181"/>-->
+    <!--<dubbo:protocol port="-1"/>-->
+
     <dubbo:config-center address="zookeeper://127.0.0.1:2181"/>
 
     <bean id="demoService" class="org.apache.dubbo.samples.configcenter.impl.DemoServiceImpl"/>
-    <dubbo:service interface="org.apache.dubbo.samples.configcenter.api.DemoService" ref="demoService"/>
-
+    <dubbo:service group="test2" 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-externalconfiguration/src/main/resources/yourconfigcenter/dubbo-properties-in-configcenter.properties b/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/resources/config-center.properties
similarity index 62%
copy from dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/resources/yourconfigcenter/dubbo-properties-in-configcenter.properties
copy to dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/resources/config-center.properties
index 180ca9f..4f4946f 100644
--- a/dubbo-samples-configcenter/dubbo-samples-configcenter-externalconfiguration/src/main/resources/yourconfigcenter/dubbo-properties-in-configcenter.properties
+++ b/dubbo-samples-configcenter/dubbo-samples-configcenter-xml/src/main/resources/config-center.properties
@@ -1,24 +1,25 @@
-#
-#
 #   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.
-#  
-#
-dubbo.application.name=configcenter-annotation-demo
-dubbo.configcenter.address=zookeeper://127.0.0.1:2181
+# Add the following global external properties to `/dubbo/config/dubbo/dubbo.properties`
 dubbo.registry.address=zookeeper://127.0.0.1:2181
-dubbo.protocol.name=dubbo
 dubbo.protocol.port=20880
-dubbo.consumer.timeout=3000
\ No newline at end of file
+dubbo.metadataReport.address=zookeeper://127.0.0.1:2181
+dubbo.registryData.simpleProviderConfig=true
+dubbo.registryData.simpleConsumerConfig=true
+# Optional. Add the following application(Consumer) specific external properties
+# to `/dubbo/config/configcenter-consumer/dubbo.properties`
+dubbo.consumer.timeout=6666
+dubbo.application.qos.port=33333
+dubbo.reference.org.apache.dubbo.samples.configcenter.api.DemoService.timeout=9999
\ No newline at end of file
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 ec2228c..ac3f123 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
@@ -36,6 +36,8 @@ public class ZKTools {
 
         generateAppLevelOverride();
         System.in.read();
+        generateServiceLevelOverride();
+        System.in.read();
         generateAppLevelOverrideConsumer();
     }
 
@@ -48,8 +50,7 @@ public class ZKTools {
                 "key: governance-appoverride-provider\n" +
                 "enabled: true\n" +
                 "configs:\n" +
-                "- addresses: [\"0.0.0.0:20880\"]\n" + "  side: provider\n" +
-                "  parameters:\n" + "    weight: 900\n" +
+                "- addresses: [\"0.0.0.0:20880\"]\n" + "  side: provider\n" + "  parameters:\n" + "    weight: 100\n" +
                 "...";
 
         System.out.println(str);
@@ -95,6 +96,22 @@ public class ZKTools {
         }
     }
 
+    public static void generateServiceLevelOverride() {
+        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" + "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:20881\"]\n" + "  side: provider\n" + "  par [...]
+
+        System.out.println(str);
+
+        try {
+            String path = "/dubbo/config/org.apache.dubbo.samples.governance.api.DemoService/configurators";
+            if (client.checkExists().forPath(path) == null) {
+                client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath(path);
+            }
+            setData(path, str);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
     private static void setData(String path, String data) throws Exception {
         client.setData().forPath(path, data.getBytes());
     }
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 d0728ea..f4ab886 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:config-center enable="false" address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:config-center highest-priority="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 ce54ed5..f880d14 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:config-center enable="false" address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:config-center highest-priority="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 cf6a090..b1fd025 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
@@ -34,6 +34,7 @@ public class ZKTools {
         client.start();
 
         generateServiceLevelOverride();
+        generateApplicationLevelOverride();
     }
 
     public static void generateServiceLevelOverride() {
@@ -44,8 +45,7 @@ public class ZKTools {
                 "enabled: true\n" +
                 "configs:\n" +
                 "- addresses: [0.0.0.0]\n" +
-                "  side: consumer\n" +
-                "  parameters:\n" + "    timeout: 6000\n" +
+                "  side: consumer\n" + "  parameters:\n" + "    timeout: 1000\n" +
                 "...\n";
 
         System.out.println(str);
@@ -61,6 +61,22 @@ public class ZKTools {
         }
     }
 
+    public static void generateApplicationLevelOverride() {
+        String str = "# All Consumers that consume the service org.apache.dubbo.samples.governance.api.DemoService will increase the timeout value to 6000\n" + "---\n" + "configVersion: v2.7\n" + "scope: application\n" + "key: governance-serviceoverride-consumer\n" + "enabled: true\n" + "configs:\n" + "- addresses: [0.0.0.0]\n" + "  side: consumer\n" + "  parameters:\n" + "    timeout: 5000\n" + "...\n";
+
+        System.out.println(str);
+
+        try {
+            String path = "/dubbo/config/governance-serviceoverride-consumer/configurators";
+            if (client.checkExists().forPath(path) == null) {
+                client.create().creatingParentsIfNeeded().forPath(path);
+            }
+            setData(path, str);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
     private static void setData(String path, String data) throws Exception {
         client.setData().forPath(path, data.getBytes());
     }
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 4109abb..4f9483e 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
@@ -40,12 +40,14 @@ public class BasicConsumer {
                 RpcContext.getContext().setAttachment(Constants.TAG_KEY, "tag1");
                 String hello = demoService.sayHello("world"); // call remote method
                 System.out.println(hello); // get result
-
+            } catch (Throwable throwable) {
+                throwable.printStackTrace();
+            }
+            try {
                 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
-
             } catch (Throwable throwable) {
                 throwable.printStackTrace();
             }
diff --git a/dubbo-samples-mock/pom.xml b/dubbo-samples-mock/pom.xml
index 051362d..4f29406 100644
--- a/dubbo-samples-mock/pom.xml
+++ b/dubbo-samples-mock/pom.xml
@@ -30,5 +30,12 @@
 
     <artifactId>dubbo-samples-mock</artifactId>
 
+    <dependencies>
+        <dependency>
+            <groupId>org.yaml</groupId>
+            <artifactId>snakeyaml</artifactId>
+            <version>1.20</version>
+        </dependency>
+    </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java b/dubbo-samples-mock/src/main/java/org/apache/dubbo/samples/mock/ZKTools.java
similarity index 73%
copy from dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
copy to dubbo-samples-mock/src/main/java/org/apache/dubbo/samples/mock/ZKTools.java
index cf6a090..448d1c3 100644
--- a/dubbo-samples-governance/dubbo-samples-servicelevel-override/src/main/java/org/apache/dubbo/samples/governance/ZKTools.java
+++ b/dubbo-samples-mock/src/main/java/org/apache/dubbo/samples/mock/ZKTools.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.samples.governance;
+package org.apache.dubbo.samples.mock;
 
 import org.apache.dubbo.common.utils.StringUtils;
 
@@ -29,29 +29,19 @@ 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(6000, 3));
+        client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", 60 * 1000, 60 * 1000, new ExponentialBackoffRetry(6000, 3));
         client.start();
 
         generateServiceLevelOverride();
     }
 
     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" + "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: 6000\n" +
-                "...\n";
+        String str = "---\n" + "configVersion: v2.7\n" + "scope: service\n" + "key: org.apache.dubbo.samples.mock.api.DemoService\n" + "enabled: true\n" + "configs:\n" + "- addresses: [0.0.0.0]\n" + "  side: consumer\n" + "  parameters:\n" + "    mock: return null\n" + "...\n";
 
         System.out.println(str);
 
         try {
-            String path = "/dubbo/config/org.apache.dubbo.samples.governance.api.DemoService/configurators";
+            String path = "/dubbo/config/org.apache.dubbo.samples.mock.api.DemoService/configurators";
             if (client.checkExists().forPath(path) == null) {
                 client.create().creatingParentsIfNeeded().forPath(path);
             }
diff --git a/dubbo-samples-mock/src/main/resources/spring/mock-consumer.xml b/dubbo-samples-mock/src/main/resources/spring/mock-consumer.xml
index 09389f9..3648ccb 100644
--- a/dubbo-samples-mock/src/main/resources/spring/mock-consumer.xml
+++ b/dubbo-samples-mock/src/main/resources/spring/mock-consumer.xml
@@ -26,8 +26,7 @@
     don't set it same as provider -->
     <dubbo:application name="demo-consumer"/>
 
-    <!-- use multicast registry center to discover service -->
-    <dubbo:registry group="aaa" address="zookeeper://127.0.0.1:2181"/>
+    <dubbo:registry 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-mock/src/main/resources/spring/mock-provider.xml b/dubbo-samples-mock/src/main/resources/spring/mock-provider.xml
index 4715272..de056ed 100644
--- a/dubbo-samples-mock/src/main/resources/spring/mock-provider.xml
+++ b/dubbo-samples-mock/src/main/resources/spring/mock-provider.xml
@@ -25,8 +25,6 @@
     <!-- provider's application name, used for tracing dependency relationship -->
     <dubbo:application name="demo-provider"/>
 
-    <!-- use multicast registry center to export service -->
-    <dubbo:registry group="aaa" address="zookeeper://127.0.0.1:2181"/>
     <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
 
     <!-- use dubbo protocol to export service on port 20880 -->
diff --git a/pom.xml b/pom.xml
index 47136ba..4df253e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,7 +56,7 @@
         <module>dubbo-samples-governance</module>
         <module>dubbo-samples-metadata-report</module>
         <module>dubbo-samples-simplified-registry</module>
-        <module>dubbo-samples-concurrency</module>
+        <module>dubbo-samples-chain</module>
     </modules>
 
     <properties>