This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-spi-extensions.git
The following commit(s) were added to refs/heads/master by this push:
new 0268b6b add configcenter README (#299)
0268b6b is described below
commit 0268b6b8aebfefb771138dd0d3da0ebf55530a20
Author: 王聪洋 <[email protected]>
AuthorDate: Tue Apr 2 14:22:34 2024 +0800
add configcenter README (#299)
* add auddo-wasm/README_zh.md
* add common README and cross-thread README_ch
* add configcenter README
* add DocAutoGenCN
* add License
* update README
---------
Co-authored-by: xiaosheng <[email protected]>
---
README.md | 13 ++
README_CN.md | 117 ++++++++++
.../main/java/org/apache/dubbo/doc/DocAutoGen.java | 4 +-
.../doc/{DocAutoGen.java => DocAutoGenCN.java} | 50 ++---
dubbo-configcenter-extensions/README.md | 238 +++++++++++++++++++++
dubbo-configcenter-extensions/README_ch.md | 237 ++++++++++++++++++++
6 files changed, 620 insertions(+), 39 deletions(-)
diff --git a/README.md b/README.md
index 3037d58..3b964e1 100644
--- a/README.md
+++ b/README.md
@@ -4,6 +4,8 @@
[](https://search.maven.org/search?q=g:org.apache.dubbo%20AND%20a:dubbo-spi-extensions)
[]
+[中文](./README_CN.md)
+
The purpose of dubbo-spi-extensions is to provide open, community-driven,
reusable components to build microservice programs with different needs. These
components extend the core of the Apache Dubbo project, but they are separated
and decoupled.
Developers can flexibly choose the required extension dependencies to develop
microservice programs based on their needs. The available extensions are as
follows:Developers can flexibly choose the required extension dependencies to
develop microservice programs based on their needs.
@@ -50,6 +52,8 @@ The available extensions are as follows:
- [dubbo-mock-extensions](dubbo-mock-extensions)
- [dubbo-mock-admin](dubbo-mock-extensions/dubbo-mock-admin)
- [dubbo-mock-api](dubbo-mock-extensions/dubbo-mock-api)
+- [dubbo-proxy-extensions](dubbo-proxy-extensions)
+ - [dubbo-proxy-bytebuddy](dubbo-proxy-extensions/dubbo-proxy-bytebuddy)
- [dubbo-registry-extensions](dubbo-registry-extensions)
- [dubbo-registry-consul](dubbo-registry-extensions/dubbo-registry-consul)
- [dubbo-registry-dns](dubbo-registry-extensions/dubbo-registry-dns)
@@ -76,6 +80,7 @@ The available extensions are as follows:
- [dubbo-rpc-webservice](dubbo-rpc-extensions/dubbo-rpc-webservice)
- [dubbo-serialization-extensions](dubbo-serialization-extensions)
-
[dubbo-serialization-avro](dubbo-serialization-extensions/dubbo-serialization-avro)
+ -
[dubbo-serialization-common](dubbo-serialization-extensions/dubbo-serialization-common)
-
[dubbo-serialization-fastjson](dubbo-serialization-extensions/dubbo-serialization-fastjson)
-
[dubbo-serialization-fst](dubbo-serialization-extensions/dubbo-serialization-fst)
-
[dubbo-serialization-fury](dubbo-serialization-extensions/dubbo-serialization-fury)
@@ -89,6 +94,14 @@ The available extensions are as follows:
-
[dubbo-serialization-test](dubbo-serialization-extensions/dubbo-serialization-test)
- [dubbo-tag-extensions](dubbo-tag-extensions)
- [dubbo-tag-subnets](dubbo-tag-extensions/dubbo-tag-subnets)
+- [dubbo-wasm](dubbo-wasm)
+ - [dubbo-wasm-api](dubbo-wasm/dubbo-wasm-api)
+ - [dubbo-wasm-cluster-api](dubbo-wasm/dubbo-wasm-cluster-api)
+ - [dubbo-wasm-common-api](dubbo-wasm/dubbo-wasm-common-api)
+ - [dubbo-wasm-registry-api](dubbo-wasm/dubbo-wasm-registry-api)
+ - [dubbo-wasm-remoting-api](dubbo-wasm/dubbo-wasm-remoting-api)
+ - [dubbo-wasm-rpc-api](dubbo-wasm/dubbo-wasm-rpc-api)
+ - [dubbo-wasm-test](dubbo-wasm/dubbo-wasm-test)
- [dubbo-xds](dubbo-xds)
## Contribution
diff --git a/README_CN.md b/README_CN.md
index e69de29..e173e12 100644
--- a/README_CN.md
+++ b/README_CN.md
@@ -0,0 +1,117 @@
+# dubbo-spi-extensions
+[](https://travis-ci.org/apache/dubbo-spi-extensions)
+[](https://codecov.io/gh/apache/dubbo-spi-extensions)
+[](https://search.maven.org/search?q=g:org.apache.dubbo%20AND%20a:dubbo-spi-extensions)
+[]
+
+[English](./README.md)
+
+dubbo-spi-extensions的目的是提供开放的、社区驱动的、可重用的组件,用于构建具有不同需求的微服务程序。这些组件扩展了Apache
Dubbo项目的核心,但它们是分离的且解耦的。
+
+开发者可以根据自己的需求灵活选择所需的扩展依赖,开发基于微服务的程序。现有的扩展如下:开发者可以根据自己的需求灵活选择所需的扩展依赖,开发基于微服务的程序。
+
+有关版本发布说明,请参阅文档:
+- [Release](https://cn.dubbo.apache.org/zh-cn/download/spi-extensions/)
+-
[Reference](https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/overview/)
+
+现有的扩展如下:
+
+- [dubbo-api-docs](dubbo-api-docs)
+ - [dubbo-api-docs-annotations](dubbo-api-docs/dubbo-api-docs-annotations)
+ - [dubbo-api-docs-core](dubbo-api-docs/dubbo-api-docs-core)
+ - [dubbo-api-docs-examples](dubbo-api-docs/dubbo-api-docs-examples)
+- [dubbo-cluster-extensions](dubbo-cluster-extensions)
+ -
[dubbo-cluster-broadcast-1](dubbo-cluster-extensions/dubbo-cluster-broadcast-1)
+ -
[dubbo-cluster-loadbalance-peakewma](dubbo-cluster-extensions/dubbo-cluster-loadbalance-peakewma)
+ -
[dubbo-cluster-polaris-dubbo2](dubbo-cluster-extensions/dubbo-cluster-polaris-dubbo2)
+ -
[dubbo-cluster-specify-address-common](dubbo-cluster-extensions/dubbo-cluster-specify-address-common)
+ -
[dubbo-cluster-specify-address-dubbo2](dubbo-cluster-extensions/dubbo-cluster-specify-address-dubbo2)
+ -
[dubbo-cluster-specify-address-dubbo3](dubbo-cluster-extensions/dubbo-cluster-specify-address-dubbo3)
+- [dubbo-common-extensions](dubbo-common-extensions)
+- [dubbo-configcenter-extensions](dubbo-configcenter-extensions)
+ -
[dubbo-configcenter-consul](dubbo-configcenter-extensions/dubbo-configcenter-consul)
+ -
[dubbo-configcenter-etcd](dubbo-configcenter-extensions/dubbo-configcenter-etcd)
+- [dubbo-cross-thread-extensions](dubbo-cross-thread-extensions)
+- [dubbo-extensions-dependencies-bom](dubbo-extensions-dependencies-bom)
+- [dubbo-extensions-distribution](dubbo-extensions-distribution)
+ - [dubbo-apache-release](dubbo-extensions-distribution/dubbo-apache-release)
+ - [dubbo-bom](dubbo-extensions-distribution/dubbo-bom)
+- [dubbo-filter-extensions](dubbo-filter-extensions)
+ -
[dubbo-filter-polaris-dubbo2](dubbo-filter-extensions/dubbo-filter-polaris-dubbo2)
+ -
[dubbo-filter-polaris-circuitbreaker-dubbo2](dubbo-filter-extensions/dubbo-filter-polaris-dubbo2/dubbo-filter-polaris-circuitbreaker-dubbo2)
+ -
[dubbo-filter-polaris-ratelimit-dubbo2](dubbo-filter-extensions/dubbo-filter-polaris-dubbo2/dubbo-filter-polaris-ratelimit-dubbo2)
+ - [dubbo-filter-seata](dubbo-filter-extensions/dubbo-filter-seata)
+- [dubbo-gateway-extensions](dubbo-gateway-extensions)
+ - [dubbo-gateway-common](dubbo-gateway-extensions/dubbo-gateway-common)
+ - [dubbo-gateway-consumer](dubbo-gateway-extensions/dubbo-gateway-consumer)
+ - [dubbo-gateway-provider](dubbo-gateway-extensions/dubbo-gateway-provider)
+- [dubbo-kubernetes](dubbo-kubernetes)
+- [dubbo-metadata-report-extensions](dubbo-metadata-report-extensions)
+ -
[dubbo-metadata-report-consul](dubbo-metadata-report-extensions/dubbo-metadata-report-consul)
+ -
[dubbo-metadata-report-etcd](dubbo-metadata-report-extensions/dubbo-metadata-report-etcd)
+- [dubbo-mock-extensions](dubbo-mock-extensions)
+ - [dubbo-mock-admin](dubbo-mock-extensions/dubbo-mock-admin)
+ - [dubbo-mock-api](dubbo-mock-extensions/dubbo-mock-api)
+- [dubbo-proxy-extensions](dubbo-proxy-extensions)
+ - [dubbo-proxy-bytebuddy](dubbo-proxy-extensions/dubbo-proxy-bytebuddy)
+- [dubbo-registry-extensions](dubbo-registry-extensions)
+ - [dubbo-registry-consul](dubbo-registry-extensions/dubbo-registry-consul)
+ - [dubbo-registry-dns](dubbo-registry-extensions/dubbo-registry-dns)
+ - [dubbo-registry-etcd3](dubbo-registry-extensions/dubbo-registry-etcd3)
+ -
[dubbo-registry-nameservice](dubbo-registry-extensions/dubbo-registry-nameservice)
+ - [dubbo-registry-polaris](dubbo-registry-extensions/dubbo-registry-polaris)
+ - [dubbo-registry-redis](dubbo-registry-extensions/dubbo-registry-redis)
+ - [dubbo-registry-sofa](dubbo-registry-extensions/dubbo-registry-sofa)
+- [dubbo-remoting-extensions](dubbo-remoting-extensions)
+ - [dubbo-remoting-etcd3](dubbo-remoting-extensions/dubbo-remoting-etcd3)
+ - [dubbo-remoting-grizzly](dubbo-remoting-extensions/dubbo-remoting-grizzly)
+ - [dubbo-remoting-mina](dubbo-remoting-extensions/dubbo-remoting-mina)
+ - [dubbo-remoting-p2p](dubbo-remoting-extensions/dubbo-remoting-p2p)
+ - [dubbo-remoting-quic](dubbo-remoting-extensions/dubbo-remoting-quic)
+ - [dubbo-remoting-redis](dubbo-remoting-extensions/dubbo-remoting-redis)
+- [dubbo-rpc-extensions](dubbo-rpc-extensions)
+ - [dubbo-rpc-hessian](dubbo-rpc-extensions/dubbo-rpc-hessian)
+ - [dubbo-rpc-http](dubbo-rpc-extensions/dubbo-rpc-http)
+ - [dubbo-rpc-memcached](dubbo-rpc-extensions/dubbo-rpc-memcached)
+ - [dubbo-rpc-native-thrift](dubbo-rpc-extensions/dubbo-rpc-native-thrift)
+ - [dubbo-rpc-redis](dubbo-rpc-extensions/dubbo-rpc-redis)
+ - [dubbo-rpc-rmi](dubbo-rpc-extensions/dubbo-rpc-rmi)
+ - [dubbo-rpc-rocketmq](dubbo-rpc-extensions/dubbo-rpc-rocketmq)
+ - [dubbo-rpc-webservice](dubbo-rpc-extensions/dubbo-rpc-webservice)
+- [dubbo-serialization-extensions](dubbo-serialization-extensions)
+ -
[dubbo-serialization-avro](dubbo-serialization-extensions/dubbo-serialization-avro)
+ -
[dubbo-serialization-common](dubbo-serialization-extensions/dubbo-serialization-common)
+ -
[dubbo-serialization-fastjson](dubbo-serialization-extensions/dubbo-serialization-fastjson)
+ -
[dubbo-serialization-fst](dubbo-serialization-extensions/dubbo-serialization-fst)
+ -
[dubbo-serialization-fury](dubbo-serialization-extensions/dubbo-serialization-fury)
+ -
[dubbo-serialization-gson](dubbo-serialization-extensions/dubbo-serialization-gson)
+ -
[dubbo-serialization-jackson](dubbo-serialization-extensions/dubbo-serialization-jackson)
+ -
[dubbo-serialization-kryo](dubbo-serialization-extensions/dubbo-serialization-kryo)
+ -
[dubbo-serialization-msgpack](dubbo-serialization-extensions/dubbo-serialization-msgpack)
+ -
[dubbo-serialization-native-hession](dubbo-serialization-extensions/dubbo-serialization-native-hession)
+ -
[dubbo-serialization-protobuf](dubbo-serialization-extensions/dubbo-serialization-protobuf)
+ -
[dubbo-serialization-protostuff](dubbo-serialization-extensions/dubbo-serialization-protostuff)
+ -
[dubbo-serialization-test](dubbo-serialization-extensions/dubbo-serialization-test)
+- [dubbo-tag-extensions](dubbo-tag-extensions)
+ - [dubbo-tag-subnets](dubbo-tag-extensions/dubbo-tag-subnets)
+- [dubbo-wasm](dubbo-wasm)
+ - [dubbo-wasm-api](dubbo-wasm/dubbo-wasm-api)
+ - [dubbo-wasm-cluster-api](dubbo-wasm/dubbo-wasm-cluster-api)
+ - [dubbo-wasm-common-api](dubbo-wasm/dubbo-wasm-common-api)
+ - [dubbo-wasm-registry-api](dubbo-wasm/dubbo-wasm-registry-api)
+ - [dubbo-wasm-remoting-api](dubbo-wasm/dubbo-wasm-remoting-api)
+ - [dubbo-wasm-rpc-api](dubbo-wasm/dubbo-wasm-rpc-api)
+ - [dubbo-wasm-test](dubbo-wasm/dubbo-wasm-test)
+- [dubbo-xds](dubbo-xds)
+
+## 贡献
+
+
+感谢所有为此做出贡献的人!
+
+
+<a href="https://github.com/apache/dubbo-spi-extensions/graphs/contributors">
+ <img
src="https://contributors-img.web.app/image?repo=apache/dubbo-spi-extensions" />
+</a>
+
+
diff --git
a/dobbo-doc-auto-gen/src/main/java/org/apache/dubbo/doc/DocAutoGen.java
b/dobbo-doc-auto-gen/src/main/java/org/apache/dubbo/doc/DocAutoGen.java
index 878803f..75f6027 100644
--- a/dobbo-doc-auto-gen/src/main/java/org/apache/dubbo/doc/DocAutoGen.java
+++ b/dobbo-doc-auto-gen/src/main/java/org/apache/dubbo/doc/DocAutoGen.java
@@ -36,6 +36,8 @@ public class DocAutoGen {
"[]";
System.out.println(x);
System.out.println();
+ String chineseFile = "[中文](./README_CN.md)\n";
+ System.out.println(chineseFile);
String description = "The purpose of dubbo-spi-extensions is to
provide open, community-driven, reusable components to build microservice
programs with different needs. These components extend the core of the Apache
Dubbo project, but they are separated and decoupled.";
System.out.println(description);
@@ -68,7 +70,7 @@ public class DocAutoGen {
System.out.println();
}
- private static void visitFile(File file, String parentPath, int level) {
+ public static void visitFile(File file, String parentPath, int level) {
File[] files = file.listFiles();
// gen code sort by file name
Arrays.sort(files, (o1, o2) -> {
diff --git
a/dobbo-doc-auto-gen/src/main/java/org/apache/dubbo/doc/DocAutoGen.java
b/dobbo-doc-auto-gen/src/main/java/org/apache/dubbo/doc/DocAutoGenCN.java
similarity index 58%
copy from dobbo-doc-auto-gen/src/main/java/org/apache/dubbo/doc/DocAutoGen.java
copy to dobbo-doc-auto-gen/src/main/java/org/apache/dubbo/doc/DocAutoGenCN.java
index 878803f..e243fc4 100644
--- a/dobbo-doc-auto-gen/src/main/java/org/apache/dubbo/doc/DocAutoGen.java
+++ b/dobbo-doc-auto-gen/src/main/java/org/apache/dubbo/doc/DocAutoGenCN.java
@@ -19,15 +19,14 @@ package org.apache.dubbo.doc;
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
-import java.util.Arrays;
-public class DocAutoGen {
+public class DocAutoGenCN {
public static void main(String[] args) throws IOException {
String filePath = System.getProperty("user.dir");
File file = new File(filePath);
int level = 0;
String parentPath = "";
- System.setOut(new PrintStream(filePath + "/" + "README.md"));
+ System.setOut(new PrintStream(filePath + "/" + "README_CN.md"));
String title = "# dubbo-spi-extensions";
System.out.println(title);
String x = "[](https://travis-ci.org/apache/dubbo-spi-extensions)\n"
+
@@ -36,30 +35,32 @@ public class DocAutoGen {
"[]";
System.out.println(x);
System.out.println();
- String description = "The purpose of dubbo-spi-extensions is to
provide open, community-driven, reusable components to build microservice
programs with different needs. These components extend the core of the Apache
Dubbo project, but they are separated and decoupled.";
+ String chineseFile = "[English](./README.md)\n";
+ System.out.println(chineseFile);
+ String description =
"dubbo-spi-extensions的目的是提供开放的、社区驱动的、可重用的组件,用于构建具有不同需求的微服务程序。这些组件扩展了Apache
Dubbo项目的核心,但它们是分离的且解耦的。";
System.out.println(description);
System.out.println();
- String usage = "Developers can flexibly choose the required extension
dependencies to develop microservice programs based on their needs. The
available extensions are as follows:Developers can flexibly choose the required
extension dependencies to develop microservice programs based on their needs. ";
+ String usage =
"开发者可以根据自己的需求灵活选择所需的扩展依赖,开发基于微服务的程序。现有的扩展如下:开发者可以根据自己的需求灵活选择所需的扩展依赖,开发基于微服务的程序。";
System.out.println(usage);
System.out.println();
- System.out.println("For version release notes, please refer to the
documentation:");
+ System.out.println("有关版本发布说明,请参阅文档:");
System.out.println("-
[Release](https://cn.dubbo.apache.org/zh-cn/download/spi-extensions/)");
System.out.println("-
[Reference](https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/overview/)");
System.out.println();
- String asFollow = "The available extensions are as follows:";
+ String asFollow = "现有的扩展如下:";
System.out.println(asFollow);
System.out.println();
- visitFile(file, parentPath, level);
+ DocAutoGen.visitFile(file, parentPath, level);
System.out.println();
- String contributorTitle = "## Contribution\n";
- String thanks = "Thanks to everyone who has contributed!\n";
+ String contributorTitle = "## 贡献\n";
+ String thanks = "感谢所有为此做出贡献的人!\n";
String contributorImg =
"<a
href=\"https://github.com/apache/dubbo-spi-extensions/graphs/contributors\">\n"
+
" <img
src=\"https://contributors-img.web.app/image?repo=apache/dubbo-spi-extensions\"
/>\n" +
- "</a>\n" ;
+ "</a>\n";
System.out.println(contributorTitle);
System.out.println();
System.out.println(thanks);
@@ -68,31 +69,4 @@ public class DocAutoGen {
System.out.println();
}
- private static void visitFile(File file, String parentPath, int level) {
- File[] files = file.listFiles();
- // gen code sort by file name
- Arrays.sort(files, (o1, o2) -> {
- if (o1.isDirectory() && o2.isFile()) {
- return -1;
- }
- if (o1.isFile() && o2.isDirectory()) {
- return 1;
- }
- return o1.getName().compareTo(o2.getName());
- });
- for (int i = 0; i < files.length; i++) {
- File f = files[i];
- String name = f.getName();
- if (name.startsWith("dubbo-")) {
- String blank = "";
- for (int j = 0; j < level; j++) {
- blank += " ";
- }
-
- String currentPath = level == 0 ? name : parentPath + "/" +
name;
- System.out.println(blank + "- [" + name + "]" + "(" +
currentPath + ")");
- visitFile(f, currentPath, level + 1);
- }
- }
- }
}
diff --git a/dubbo-configcenter-extensions/README.md
b/dubbo-configcenter-extensions/README.md
new file mode 100644
index 0000000..fc204d4
--- /dev/null
+++ b/dubbo-configcenter-extensions/README.md
@@ -0,0 +1,238 @@
+# Dubbo ConfigCenter Extension
+
+[中文](README_ch.md)
+> The Dubbo Configcenter Extension is an adapter for registration center
modules such as Consul and Etcd, beyond the configuration center supported by
[dubbo](https://github.com/apache/dubbo).
+
+## Integrate example
+
+### Consul
+
+
+#### Adding on the interface side
+```java
+public interface DemoService {
+
+ String sayHello(String name);
+
+}
+
+```
+#### Adding provider-side configuration
+- import dependency
+
+```xml
+<dependency>
+ <groupId>org.apache.dubbo.extensions</groupId>
+ <artifactId>dubbo-configcenter-consul</artifactId>
+ <version>3.2.0</version>
+</dependency>
+```
+- `spring/configcenter-provider.xml`
+```xml
+<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:context="http://www.springframework.org/schema/context"
+ 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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
+ <context:property-placeholder/>
+
+ <dubbo:application name="dubbo-configcenter-consul-provider"/>
+
+ <dubbo:config-center
address="consul://${consul.address:localhost}:8500"/>**
+
+ <bean id="demoService"
class="org.apache.dubbo.samples.configcenter.impl.DemoServiceImpl"/>
+
+ <dubbo:service
interface="org.apache.dubbo.samples.configcenter.api.DemoService"
ref="demoService"/>
+</beans>
+```
+- Implementing the interface
+```java
+public class DemoServiceImpl implements DemoService {
+
+ @Override
+ public String sayHello(String name) {
+ System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new
Date()) + "] Hello " + name +
+ ", request from consumer: " +
RpcContext.getContext().getRemoteAddress());
+ return "Hello " + name + ", response from provider: " +
RpcContext.getContext().getLocalAddress();
+ }
+
+}
+
+```
+
+- Exposing the service
+```java
+public class ConsulProvider {
+
+ public static void main(String[] args) throws Exception {
+ ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext(new
String[]{"spring/configcenter-provider.xml"});
+ context.start();
+
+ System.out.println("dubbo service started");
+ new CountDownLatch(1).await();
+ }
+
+}
+
+```
+
+#### Adding configuration on the consumer side
+- import dependency
+
+```xml
+<dependency>
+ <groupId>org.apache.dubbo.extensions</groupId>
+ <artifactId>dubbo-configcenter-consul</artifactId>
+ <version>3.2.0</version>
+</dependency>
+```
+- `spring/configcenter-consumer.xml`
+```xml
+<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:context="http://www.springframework.org/schema/context"
+ 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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
+ <context:property-placeholder/>
+
+ <dubbo:application name="dubbo-configcenter-consul-consumer"/>
+
+ <dubbo:config-center highest-priority="false" protocol="consul"
address="${consul.address:localhost}:8500"/>
+
+ <dubbo:reference id="demoService"
interface="org.apache.dubbo.samples.configcenter.api.DemoService"/>
+
+</beans>
+```
+- Invoking the service
+```java
+public class ConsulConsumer {
+
+ public static void main(String[] args) {
+ ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext(new
String[]{"spring/configcenter-consumer.xml"});
+ context.start();
+ DemoService demoService = context.getBean("demoService",
DemoService.class);
+
+ String hello = demoService.sayHello("world");
+ System.out.println(hello);
+
+ }
+}
+
+```
+
+
+### Etcd
+
+
+#### Adding on the interface side
+```java
+public interface DemoService {
+
+ String sayHello(String name);
+
+}
+
+```
+#### Adding provider-side configuration
+- import dependency
+
+```xml
+<dependency>
+ <groupId>org.apache.dubbo.extensions</groupId>
+ <artifactId>dubbo-configcenter-etcd</artifactId>
+ <version>3.2.0</version>
+</dependency>
+```
+- `spring/configcenter-provider.xml`
+```xml
+<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:context="http://www.springframework.org/schema/context"
+ 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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
+ <context:property-placeholder/>
+
+ <dubbo:application name="dubbo-configcenter-etcd-provider"/>
+
+ <dubbo:config-center address="etcd3://${etcd.address:localhost}:2379"/>**
+
+ <bean id="demoService"
class="org.apache.dubbo.samples.configcenter.impl.DemoServiceImpl"/>
+
+ <dubbo:service
interface="org.apache.dubbo.samples.configcenter.api.DemoService"
ref="demoService"/>
+</beans>
+```
+- Implementing the interface
+```java
+public class DemoServiceImpl implements DemoService {
+
+ @Override
+ public String sayHello(String name) {
+ System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new
Date()) + "] Hello " + name +
+ ", request from consumer: " +
RpcContext.getContext().getRemoteAddress());
+ return "Hello " + name + ", response from provider: " +
RpcContext.getContext().getLocalAddress();
+ }
+
+}
+
+```
+
+- Exposing the service
+```java
+public class EtcdProvider {
+
+ public static void main(String[] args) throws Exception {
+ ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext(new
String[]{"spring/configcenter-provider.xml"});
+ context.start();
+
+ System.out.println("dubbo service started");
+ new CountDownLatch(1).await();
+ }
+
+}
+
+```
+
+#### Adding configuration on the consumer side
+- import dependency
+
+```xml
+<dependency>
+ <groupId>org.apache.dubbo.extensions</groupId>
+ <artifactId>dubbo-configcenter-consul</artifactId>
+ <version>3.2.0</version>
+</dependency>
+```
+- `spring/configcenter-consumer.xml`
+```xml
+<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:context="http://www.springframework.org/schema/context"
+ 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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
+ <context:property-placeholder/>
+
+ <dubbo:application name="dubbo-configcenter-etcd-consumer"/>
+
+ <dubbo:config-center highest-priority="false" protocol="etcd3"
address="${etcd.address:localhost}:2379"/>
+
+ <dubbo:reference id="demoService"
interface="org.apache.dubbo.samples.configcenter.api.DemoService"/>
+
+</beans>
+```
+- Invoking the service
+```java
+public class EtcdConsumer {
+
+ public static void main(String[] args) {
+ ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext(new
String[]{"spring/configcenter-consumer.xml"});
+ context.start();
+ DemoService demoService = context.getBean("demoService",
DemoService.class);
+
+ String hello = demoService.sayHello("world");
+ System.out.println(hello);
+
+ }
+}
+
+```
+
diff --git a/dubbo-configcenter-extensions/README_ch.md
b/dubbo-configcenter-extensions/README_ch.md
new file mode 100644
index 0000000..d17d7d8
--- /dev/null
+++ b/dubbo-configcenter-extensions/README_ch.md
@@ -0,0 +1,237 @@
+# Dubbo 配置中心扩展
+
+[English](README.md)
+> Dubbo Configcenter
Extension是提供给[dubbo](https://github.com/apache/dubbo)支持的配置中心之外的如consul、etcd等注册中心模块的适配。
+
+## 集成示例
+
+### Consul
+
+
+#### interface端添加
+```java
+public interface DemoService {
+
+ String sayHello(String name);
+
+}
+
+```
+#### provider端添加配置
+- 引入依赖
+
+```xml
+<dependency>
+ <groupId>org.apache.dubbo.extensions</groupId>
+ <artifactId>dubbo-configcenter-consul</artifactId>
+ <version>3.2.0</version>
+</dependency>
+```
+- `spring/configcenter-provider.xml`
+```xml
+<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:context="http://www.springframework.org/schema/context"
+ 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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
+ <context:property-placeholder/>
+
+ <dubbo:application name="dubbo-configcenter-consul-provider"/>
+
+ <dubbo:config-center
address="consul://${consul.address:localhost}:8500"/>**
+
+ <bean id="demoService"
class="org.apache.dubbo.samples.configcenter.impl.DemoServiceImpl"/>
+
+ <dubbo:service
interface="org.apache.dubbo.samples.configcenter.api.DemoService"
ref="demoService"/>
+</beans>
+```
+- 实现接口
+```java
+public class DemoServiceImpl implements DemoService {
+
+ @Override
+ public String sayHello(String name) {
+ System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new
Date()) + "] Hello " + name +
+ ", request from consumer: " +
RpcContext.getContext().getRemoteAddress());
+ return "Hello " + name + ", response from provider: " +
RpcContext.getContext().getLocalAddress();
+ }
+
+}
+
+```
+
+- 暴露服务
+```java
+public class ConsulProvider {
+
+ public static void main(String[] args) throws Exception {
+ ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext(new
String[]{"spring/configcenter-provider.xml"});
+ context.start();
+
+ System.out.println("dubbo service started");
+ new CountDownLatch(1).await();
+ }
+
+}
+
+```
+
+#### consumer端添加配置
+- 引入依赖
+
+```xml
+<dependency>
+ <groupId>org.apache.dubbo.extensions</groupId>
+ <artifactId>dubbo-configcenter-consul</artifactId>
+ <version>3.2.0</version>
+</dependency>
+```
+- `spring/configcenter-consumer.xml`
+```xml
+<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:context="http://www.springframework.org/schema/context"
+ 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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
+ <context:property-placeholder/>
+
+ <dubbo:application name="dubbo-configcenter-consul-consumer"/>
+
+ <dubbo:config-center highest-priority="false" protocol="consul"
address="${consul.address:localhost}:8500"/>
+
+ <dubbo:reference id="demoService"
interface="org.apache.dubbo.samples.configcenter.api.DemoService"/>
+
+</beans>
+```
+- 调用服务
+```java
+public class ConsulConsumer {
+
+ public static void main(String[] args) {
+ ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext(new
String[]{"spring/configcenter-consumer.xml"});
+ context.start();
+ DemoService demoService = context.getBean("demoService",
DemoService.class);
+
+ String hello = demoService.sayHello("world");
+ System.out.println(hello);
+
+ }
+}
+
+```
+
+
+### Etcd
+
+
+#### interface端添加
+```java
+public interface DemoService {
+
+ String sayHello(String name);
+
+}
+
+```
+#### provider端添加配置
+- 引入依赖
+
+```xml
+<dependency>
+ <groupId>org.apache.dubbo.extensions</groupId>
+ <artifactId>dubbo-configcenter-etcd</artifactId>
+ <version>3.2.0</version>
+</dependency>
+```
+- `spring/configcenter-provider.xml`
+```xml
+<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:context="http://www.springframework.org/schema/context"
+ 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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
+ <context:property-placeholder/>
+
+ <dubbo:application name="dubbo-configcenter-etcd-provider"/>
+
+ <dubbo:config-center address="etcd3://${etcd.address:localhost}:2379"/>**
+
+ <bean id="demoService"
class="org.apache.dubbo.samples.configcenter.impl.DemoServiceImpl"/>
+
+ <dubbo:service
interface="org.apache.dubbo.samples.configcenter.api.DemoService"
ref="demoService"/>
+</beans>
+```
+- 实现接口
+```java
+public class DemoServiceImpl implements DemoService {
+
+ @Override
+ public String sayHello(String name) {
+ System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new
Date()) + "] Hello " + name +
+ ", request from consumer: " +
RpcContext.getContext().getRemoteAddress());
+ return "Hello " + name + ", response from provider: " +
RpcContext.getContext().getLocalAddress();
+ }
+
+}
+
+```
+
+- 暴露服务
+```java
+public class EtcdProvider {
+
+ public static void main(String[] args) throws Exception {
+ ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext(new
String[]{"spring/configcenter-provider.xml"});
+ context.start();
+
+ System.out.println("dubbo service started");
+ new CountDownLatch(1).await();
+ }
+
+}
+
+```
+
+#### consumer端添加配置
+- 引入依赖
+
+```xml
+<dependency>
+ <groupId>org.apache.dubbo.extensions</groupId>
+ <artifactId>dubbo-configcenter-consul</artifactId>
+ <version>3.2.0</version>
+</dependency>
+```
+- `spring/configcenter-consumer.xml`
+```xml
+<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:context="http://www.springframework.org/schema/context"
+ 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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
+ <context:property-placeholder/>
+
+ <dubbo:application name="dubbo-configcenter-etcd-consumer"/>
+
+ <dubbo:config-center highest-priority="false" protocol="etcd3"
address="${etcd.address:localhost}:2379"/>
+
+ <dubbo:reference id="demoService"
interface="org.apache.dubbo.samples.configcenter.api.DemoService"/>
+
+</beans>
+```
+- 调用服务
+```java
+public class EtcdConsumer {
+
+ public static void main(String[] args) {
+ ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext(new
String[]{"spring/configcenter-consumer.xml"});
+ context.start();
+ DemoService demoService = context.getBean("demoService",
DemoService.class);
+
+ String hello = demoService.sayHello("world");
+ System.out.println(hello);
+
+ }
+}
+
+```