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