diff --git a/spring-cloud-alibaba-examples/pom.xml b/spring-cloud-alibaba-examples/pom.xml
index 31e8ca5e..91452590 100644
--- a/spring-cloud-alibaba-examples/pom.xml
+++ b/spring-cloud-alibaba-examples/pom.xml
@@ -37,6 +37,7 @@
rocketmq-example
spring-cloud-bus-rocketmq-example
schedulerx-example/schedulerx-simple-task-example
+ spring-cloud-alibaba-dubbo-examples
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/pom.xml
new file mode 100644
index 00000000..65bc560f
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/pom.xml
@@ -0,0 +1,178 @@
+
+
+
+ spring-cloud-alibaba-examples
+ org.springframework.cloud
+ 0.2.2.BUILD-SNAPSHOT
+ ../pom.xml
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-alibaba-dubbo-examples
+ Spring Cloud Alibaba Dubbo Examples
+ pom
+
+
+ spring-cloud-dubbo-sample-api
+ spring-cloud-dubbo-provider-sample
+ spring-cloud-dubbo-consumer-sample
+
+
+
+ 2.6.5
+ 0.2.1.RELEASE
+ 0.0.2
+ 2.1.0.RELEASE
+ 4.0.1
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+
+
+ com.alibaba
+ dubbo-dependencies-bom
+ ${dubbo.version}
+ pom
+ import
+
+
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-actuator-autoconfigure
+
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+
+
+
+ org.springframework.boot
+ spring-boot
+
+
+
+ org.springframework.boot
+ spring-boot-autoconfigure
+ true
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-commons
+
+
+
+ org.springframework.cloud
+ spring-cloud-context
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-client
+ true
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-zookeeper-discovery
+ ${spring-cloud-zookeeper.version}
+ true
+
+
+ org.apache.zookeeper
+ zookeeper
+
+
+
+
+
+ org.apache.zookeeper
+ zookeeper
+ 3.4.12
+ true
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+
+
+ org.apache.curator
+ curator-framework
+ ${curator.version}
+ true
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-dubbo
+ ${project.version}
+
+
+
+
+
+
+
+
+ nacos
+
+ true
+
+
+
+
+
+
+
+ eureka
+
+
+
+
+
+
+
+ zookeeper
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml
new file mode 100644
index 00000000..5a0debd1
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml
@@ -0,0 +1,38 @@
+
+
+
+ spring-cloud-alibaba-dubbo-examples
+ org.springframework.cloud
+ 0.2.2.BUILD-SNAPSHOT
+ ../pom.xml
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-dubbo-consumer-sample
+ Spring Cloud Dubbo Consumer Sample
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dubbo-sample-api
+ ${project.version}
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java
new file mode 100644
index 00000000..5933a281
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java
@@ -0,0 +1,217 @@
+/*
+ * 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.springframework.cloud.alibaba.dubbo.bootstrap;
+
+import com.alibaba.dubbo.config.annotation.Reference;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.cloud.alibaba.dubbo.annotation.DubboTransported;
+import org.springframework.cloud.alibaba.dubbo.service.RestService;
+import org.springframework.cloud.alibaba.dubbo.service.User;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.client.loadbalancer.LoadBalanced;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.springframework.http.MediaType.APPLICATION_JSON_UTF8_VALUE;
+
+/**
+ * Dubbo Spring Cloud Consumer Bootstrap
+ */
+@EnableDiscoveryClient
+@EnableAutoConfiguration
+@EnableFeignClients
+public class DubboSpringCloudConsumerBootstrap {
+
+ @Reference(version = "1.0.0")
+ private RestService restService;
+
+ @Autowired
+ @Lazy
+ private FeignRestService feignRestService;
+
+ @Autowired
+ @Lazy
+ private DubboFeignRestService dubboFeignRestService;
+
+ @Value("${provider.application.name}")
+ private String providerApplicationName;
+
+ @Autowired
+ @LoadBalanced
+ private RestTemplate restTemplate;
+
+ @FeignClient("${provider.application.name}")
+ public interface FeignRestService {
+
+ @GetMapping(value = "/param")
+ String param(@RequestParam("param") String param);
+
+ @PostMapping("/params")
+ public String params(@RequestParam("b") String b, @RequestParam("a") int a);
+
+ @PostMapping(value = "/request/body/map", produces = APPLICATION_JSON_UTF8_VALUE)
+ User requestBody(@RequestParam("param") String param, @RequestBody Map data);
+
+ @GetMapping("/headers")
+ public String headers(@RequestHeader("h2") String header2,
+ @RequestHeader("h") String header,
+ @RequestParam("v") Integer value);
+
+ @GetMapping("/path-variables/{p1}/{p2}")
+ public String pathVariables(@PathVariable("p2") String path2,
+ @PathVariable("p1") String path1,
+ @RequestParam("v") String param);
+ }
+
+ @FeignClient("${provider.application.name}")
+ @DubboTransported
+ public interface DubboFeignRestService {
+
+ @GetMapping(value = "/param")
+ String param(@RequestParam("param") String param);
+
+ @PostMapping("/params")
+ String params(@RequestParam("b") String paramB, @RequestParam("a") int paramA);
+
+ @PostMapping(value = "/request/body/map", produces = APPLICATION_JSON_UTF8_VALUE)
+ User requestBody(@RequestParam("param") String param, @RequestBody Map data);
+
+ @GetMapping("/headers")
+ public String headers(@RequestHeader("h2") String header2,
+ @RequestParam("v") Integer value,
+ @RequestHeader("h") String header);
+
+ @GetMapping("/path-variables/{p1}/{p2}")
+ public String pathVariables(@RequestParam("v") String param,
+ @PathVariable("p2") String path2,
+ @PathVariable("p1") String path1);
+ }
+
+ @Bean
+ public ApplicationRunner paramRunner() {
+ return arguments -> {
+
+ // To call /path-variables
+ callPathVariables();
+
+ // To call /headers
+ callHeaders();
+
+ // To call /param
+ callParam();
+//
+// // To call /params
+// callParams();
+//
+// // To call /request/body/map
+// callRequestBodyMap();
+
+ };
+ }
+
+ private void callPathVariables() {
+ // Dubbo Service call
+ System.out.println(restService.pathVariables("a", "b", "c"));
+ // Spring Cloud Open Feign REST Call (Dubbo Transported)
+ System.out.println(dubboFeignRestService.pathVariables("c", "b", "a"));
+ // Spring Cloud Open Feign REST Call
+ System.out.println(feignRestService.pathVariables("b", "a", "c"));
+
+ // RestTemplate call
+ System.out.println(restTemplate.getForEntity("http://" + providerApplicationName + "//path-variables/{p1}/{p2}?v=c", String.class, "a", "b"));
+ }
+
+ private void callHeaders() {
+ // Dubbo Service call
+ System.out.println(restService.headers("a", "b", 10));
+ // Spring Cloud Open Feign REST Call (Dubbo Transported)
+ System.out.println(dubboFeignRestService.headers("b", 10, "a"));
+ // Spring Cloud Open Feign REST Call
+ System.out.println(feignRestService.headers("b", "a", 10));
+ }
+
+ private void callParam() {
+ // Dubbo Service call
+ System.out.println(restService.param("mercyblitz"));
+ // Spring Cloud Open Feign REST Call (Dubbo Transported)
+ System.out.println(dubboFeignRestService.param("mercyblitz"));
+ // Spring Cloud Open Feign REST Call
+ System.out.println(feignRestService.param("mercyblitz"));
+ }
+
+ private void callParams() {
+ // Dubbo Service call
+ System.out.println(restService.params(1, "1"));
+ // Spring Cloud Open Feign REST Call (Dubbo Transported)
+ System.out.println(dubboFeignRestService.params("1", 1));
+ // Spring Cloud Open Feign REST Call
+ System.out.println(feignRestService.params("1", 1));
+
+ // RestTemplate call
+ System.out.println(restTemplate.getForEntity("http://" + providerApplicationName + "/param?param=小马哥", String.class));
+ }
+
+ private void callRequestBodyMap() {
+
+ Map data = new HashMap<>();
+ data.put("id", 1);
+ data.put("name", "小马哥");
+ data.put("age", 33);
+
+ // Dubbo Service call
+ System.out.println(restService.requestBodyMap(data, "Hello,World"));
+ // Spring Cloud Open Feign REST Call (Dubbo Transported)
+// System.out.println(dubboFeignRestService.requestBody("Hello,World", data));
+// Spring Cloud Open Feign REST Call
+ System.out.println(feignRestService.requestBody("Hello,World", data));
+
+ // RestTemplate call
+ System.out.println(restTemplate.postForObject("http://" + providerApplicationName + "/request/body/map?param=小马哥", data, User.class));
+ }
+
+ @Bean
+ @LoadBalanced
+ @DubboTransported
+ public RestTemplate restTemplate() {
+ return new RestTemplate();
+ }
+
+ public static void main(String[] args) {
+ new SpringApplicationBuilder(DubboSpringCloudConsumerBootstrap.class)
+ .run(args);
+ }
+}
+
+
+
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/resources/application.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/resources/application.yaml
new file mode 100644
index 00000000..83d0d835
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/resources/application.yaml
@@ -0,0 +1,5 @@
+dubbo:
+ registry:
+ address: spring-cloud://nacos
+server:
+ port: 7070
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/resources/bootstrap.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/resources/bootstrap.yaml
new file mode 100644
index 00000000..d4db17e6
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/resources/bootstrap.yaml
@@ -0,0 +1,51 @@
+spring:
+ application:
+ name: spring-cloud-alibaba-dubbo-consumer
+ cloud:
+ nacos:
+ discovery:
+ server-addr: 127.0.0.1:8848
+ config:
+ server-addr: 127.0.0.1:8848
+ zookeeper:
+ enabled: false
+
+ main:
+ allow-bean-definition-overriding: true
+
+eureka:
+ client:
+ enabled: false
+
+provider:
+ application:
+ name: spring-cloud-alibaba-dubbo-provider
+
+---
+spring:
+ profiles: eureka
+ cloud:
+ nacos:
+ discovery:
+ enabled: false
+ register-enabled: false
+
+eureka:
+ client:
+ enabled: true
+ service-url:
+ defaultZone: http://localhost:9090/eureka/
+
+---
+spring:
+ profiles: zookeeper
+
+ cloud:
+ nacos:
+ discovery:
+ enabled: false
+ register-enabled: false
+
+ zookeeper:
+ enabled: true
+ connect-string: localhost:2181
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/pom.xml
new file mode 100644
index 00000000..9ebd00a1
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/pom.xml
@@ -0,0 +1,65 @@
+
+
+
+ spring-cloud-alibaba-dubbo-examples
+ org.springframework.cloud
+ 0.2.2.BUILD-SNAPSHOT
+ ../pom.xml
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-dubbo-provider-sample
+ Spring Cloud Dubbo Provider Sample
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dubbo-sample-api
+ ${project.version}
+
+
+
+
+ org.jboss.resteasy
+ resteasy-jaxrs
+
+
+
+ org.jboss.resteasy
+ resteasy-client
+
+
+
+ org.jboss.resteasy
+ resteasy-netty4
+
+
+
+ javax.validation
+ validation-api
+
+
+
+ org.jboss.resteasy
+ resteasy-jackson-provider
+
+
+
+ org.jboss.resteasy
+ resteasy-jaxb-provider
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/application.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/application.yaml
new file mode 100644
index 00000000..2b3eb54e
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/application.yaml
@@ -0,0 +1,20 @@
+dubbo:
+ scan:
+ base-packages: org.springframework.cloud.alibaba.dubbo.service
+ protocols:
+ dubbo:
+ name: dubbo
+ port: 12345
+ rest:
+ name: rest
+ port: 8081
+ server: netty
+ registry:
+ address: spring-cloud://nacos
+
+feign:
+ hystrix:
+ enabled: true
+
+server:
+ port: 8080
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/bootstrap.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/bootstrap.yaml
new file mode 100644
index 00000000..0cee4797
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/bootstrap.yaml
@@ -0,0 +1,47 @@
+spring:
+ application:
+ name: spring-cloud-alibaba-dubbo-provider
+ cloud:
+ nacos:
+ discovery:
+ server-addr: 127.0.0.1:8848
+ config:
+ server-addr: 127.0.0.1:8848
+ zookeeper:
+ enabled: false
+
+ main:
+ allow-bean-definition-overriding: true
+
+eureka:
+ client:
+ enabled: false
+
+---
+spring:
+ profiles: eureka
+ cloud:
+ nacos:
+ discovery:
+ enabled: false
+ register-enabled: false
+
+eureka:
+ client:
+ enabled: true
+ service-url:
+ defaultZone: http://localhost:9090/eureka/
+
+---
+spring:
+ profiles: zookeeper
+
+ cloud:
+ nacos:
+ discovery:
+ enabled: false
+ register-enabled: false
+
+ zookeeper:
+ enabled: true
+ connect-string: localhost:2181
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/pom.xml
new file mode 100644
index 00000000..16b74cdb
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/pom.xml
@@ -0,0 +1,16 @@
+
+
+
+ spring-cloud-alibaba-dubbo-examples
+ org.springframework.cloud
+ 0.2.2.BUILD-SNAPSHOT
+
+ 4.0.0
+
+ org.springframework.cloud
+ spring-cloud-dubbo-sample-api
+ Spring Cloud Dubbo Sample API
+
+
\ No newline at end of file