From 2e2d8511856977a0d89725ea55e3ccda98fe6d94 Mon Sep 17 00:00:00 2001 From: mercyblitz Date: Wed, 24 Apr 2019 17:24:16 +0800 Subject: [PATCH 1/7] Update Document --- spring-cloud-alibaba-dubbo/README.md | 0 spring-cloud-alibaba-dubbo/README_CN.md | 36 +++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 spring-cloud-alibaba-dubbo/README.md create mode 100644 spring-cloud-alibaba-dubbo/README_CN.md diff --git a/spring-cloud-alibaba-dubbo/README.md b/spring-cloud-alibaba-dubbo/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/spring-cloud-alibaba-dubbo/README_CN.md b/spring-cloud-alibaba-dubbo/README_CN.md new file mode 100644 index 000000000..47ead9f2d --- /dev/null +++ b/spring-cloud-alibaba-dubbo/README_CN.md @@ -0,0 +1,36 @@ +## 简介 + +Dubbo Spring Cloud 基于 Dubbo Spring Boot 2.7.1[^1] 和 Spring Cloud 2.x 开发,无论开发人员是 Dubbo 用户还是 Spring Cloud 用户, +都能轻松地驾驭,并以接近“零”成本的代价使应用向上迁移。Dubbo Spring Cloud 致力于简化 Cloud Native 开发成本,提高研发效能以及提升应用性能等目的。 + +Dubbo Spring Cloud 首个 Preview Release,随同 Spring Cloud Alibaba `0.2.2.RELEASE` 和 `0.9.0.RELEASE` 一同发布[^2], +分别对应 Spring Cloud Finchley[^3] 与 Greenwich[^4] (下文分别简称为 “F” 版 和 “G” 版) 。 + +[^1]: 从 2.7.0 开始,Dubbo Spring Boot 与 Dubbo 在版本上保持一致 +[^2]: Preview releases of Spring Cloud Alibaba are available: 0.9.0, 0.2.2, and 0.1.2 - +[^3]: 目前最新的 Spring Cloud “F” 版的版本为:`Finchley.SR2` - +[^4]: 当前Spring Cloud “G” 版为 `Greenwich.RELEASE` + + + +## 功能 + +由于 Dubbo Spring Cloud 构建在原生的 Spring Cloud 之上,其服务治理方面的能力可认为是 Spring Cloud Plus, +不仅完全覆盖 Spring Cloud 原生特性[^5],而且提供更为稳定和成熟的实现,特性比对如下表所示: + +| 功能组件 | Spring Cloud | Dubbo Spring Cloud | +| ---------------------------------------------------- | -------------------------------------- | ------------------------------------------------------ | +| 分布式配置(Distributed configuration) | Git、Zookeeper、Consul、JDBC | Spring Cloud 分布式配置 + Dubbo 配置中心[^6] | +| 服务注册与发现(Service registration and discovery) | Eureka、Zookeeper、Consul | Spring Cloud 原生注册中心[^7] + Dubbo 原生注册中[^8] | +| 负载均衡(Load balancing) | Ribbon(随机、轮询等算法) | Dubbo 内建实现(随机、轮询等算法 + 权重等特性) | +| 服务熔断(Circuit Breakers) | Spring Cloud Hystrix | Spring Cloud Hystrix + Alibaba Sentinel[^9] 等 | +| 服务调用(Service-to-service calls) | Open Feign、`RestTemplate` | Spring Cloud 服务调用 + Dubbo `@Reference` | +| 链路跟踪(Tracing) | Spring Cloud Sleuth[^10] + Zipkin[^11] | Zipkin、opentracing 等 | + +[^5]: Spring Cloud 特性列表 - +[^6]: Dubbo 2.7 开始支持配置中心,可自定义适配 - +[^7]: Spring Cloud 原生注册中心,除 Eureka、Zookeeper、Consul 之外,还包括 Spring Cloud Alibaba 中的 Nacos +[^8]: Dubbo 原生注册中心 - +[^9]: Alibaba Sentinel:Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性 - ,目前 Sentinel 已被 Spring Cloud 项目纳为 Circuit Breaker 的候选实现 - +[^10]:Spring Cloud Sleuth - +[^11]: Zipkin - \ No newline at end of file From b588306c71640dc6d232f14fd0b6256b730d7814 Mon Sep 17 00:00:00 2001 From: mercyblitz Date: Wed, 24 Apr 2019 17:26:08 +0800 Subject: [PATCH 2/7] Update Document --- spring-cloud-alibaba-dubbo/README.md | 6 ++++ spring-cloud-alibaba-dubbo/README_CN.md | 43 +++++++++++++------------ 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/spring-cloud-alibaba-dubbo/README.md b/spring-cloud-alibaba-dubbo/README.md index e69de29bb..d2cdb64f9 100644 --- a/spring-cloud-alibaba-dubbo/README.md +++ b/spring-cloud-alibaba-dubbo/README.md @@ -0,0 +1,6 @@ +## Info + + + +## Features + diff --git a/spring-cloud-alibaba-dubbo/README_CN.md b/spring-cloud-alibaba-dubbo/README_CN.md index 47ead9f2d..4d439b4ac 100644 --- a/spring-cloud-alibaba-dubbo/README_CN.md +++ b/spring-cloud-alibaba-dubbo/README_CN.md @@ -1,36 +1,39 @@ ## 简介 -Dubbo Spring Cloud 基于 Dubbo Spring Boot 2.7.1[^1] 和 Spring Cloud 2.x 开发,无论开发人员是 Dubbo 用户还是 Spring Cloud 用户, +Dubbo Spring Cloud 基于 Dubbo Spring Boot 2.7.1[1] 和 Spring Cloud 2.x 开发,无论开发人员是 Dubbo 用户还是 Spring Cloud 用户, 都能轻松地驾驭,并以接近“零”成本的代价使应用向上迁移。Dubbo Spring Cloud 致力于简化 Cloud Native 开发成本,提高研发效能以及提升应用性能等目的。 -Dubbo Spring Cloud 首个 Preview Release,随同 Spring Cloud Alibaba `0.2.2.RELEASE` 和 `0.9.0.RELEASE` 一同发布[^2], -分别对应 Spring Cloud Finchley[^3] 与 Greenwich[^4] (下文分别简称为 “F” 版 和 “G” 版) 。 +Dubbo Spring Cloud 首个 Preview Release,随同 Spring Cloud Alibaba `0.2.2.RELEASE` 和 `0.9.0.RELEASE` 一同发布[2], +分别对应 Spring Cloud Finchley[3] 与 Greenwich[4] (下文分别简称为 “F” 版 和 “G” 版) 。 + -[^1]: 从 2.7.0 开始,Dubbo Spring Boot 与 Dubbo 在版本上保持一致 -[^2]: Preview releases of Spring Cloud Alibaba are available: 0.9.0, 0.2.2, and 0.1.2 - -[^3]: 目前最新的 Spring Cloud “F” 版的版本为:`Finchley.SR2` - -[^4]: 当前Spring Cloud “G” 版为 `Greenwich.RELEASE` ## 功能 由于 Dubbo Spring Cloud 构建在原生的 Spring Cloud 之上,其服务治理方面的能力可认为是 Spring Cloud Plus, -不仅完全覆盖 Spring Cloud 原生特性[^5],而且提供更为稳定和成熟的实现,特性比对如下表所示: +不仅完全覆盖 Spring Cloud 原生特性[5],而且提供更为稳定和成熟的实现,特性比对如下表所示: | 功能组件 | Spring Cloud | Dubbo Spring Cloud | | ---------------------------------------------------- | -------------------------------------- | ------------------------------------------------------ | -| 分布式配置(Distributed configuration) | Git、Zookeeper、Consul、JDBC | Spring Cloud 分布式配置 + Dubbo 配置中心[^6] | -| 服务注册与发现(Service registration and discovery) | Eureka、Zookeeper、Consul | Spring Cloud 原生注册中心[^7] + Dubbo 原生注册中[^8] | +| 分布式配置(Distributed configuration) | Git、Zookeeper、Consul、JDBC | Spring Cloud 分布式配置 + Dubbo 配置中心[6] | +| 服务注册与发现(Service registration and discovery) | Eureka、Zookeeper、Consul | Spring Cloud 原生注册中心[7] + Dubbo 原生注册中[8] | | 负载均衡(Load balancing) | Ribbon(随机、轮询等算法) | Dubbo 内建实现(随机、轮询等算法 + 权重等特性) | -| 服务熔断(Circuit Breakers) | Spring Cloud Hystrix | Spring Cloud Hystrix + Alibaba Sentinel[^9] 等 | +| 服务熔断(Circuit Breakers) | Spring Cloud Hystrix | Spring Cloud Hystrix + Alibaba Sentinel[9] 等 | | 服务调用(Service-to-service calls) | Open Feign、`RestTemplate` | Spring Cloud 服务调用 + Dubbo `@Reference` | -| 链路跟踪(Tracing) | Spring Cloud Sleuth[^10] + Zipkin[^11] | Zipkin、opentracing 等 | - -[^5]: Spring Cloud 特性列表 - -[^6]: Dubbo 2.7 开始支持配置中心,可自定义适配 - -[^7]: Spring Cloud 原生注册中心,除 Eureka、Zookeeper、Consul 之外,还包括 Spring Cloud Alibaba 中的 Nacos -[^8]: Dubbo 原生注册中心 - -[^9]: Alibaba Sentinel:Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性 - ,目前 Sentinel 已被 Spring Cloud 项目纳为 Circuit Breaker 的候选实现 - -[^10]:Spring Cloud Sleuth - -[^11]: Zipkin - \ No newline at end of file +| 链路跟踪(Tracing) | Spring Cloud Sleuth[10] + Zipkin[11] | Zipkin、opentracing 等 | + + + +[1]: 从 2.7.0 开始,Dubbo Spring Boot 与 Dubbo 在版本上保持一致 +[2]: Preview releases of Spring Cloud Alibaba are available: 0.9.0, 0.2.2, and 0.1.2 - +[3]: 目前最新的 Spring Cloud “F” 版的版本为:`Finchley.SR2` - +[4]: 当前Spring Cloud “G” 版为 `Greenwich.RELEASE` +[5]: Spring Cloud 特性列表 - +[6]: Dubbo 2.7 开始支持配置中心,可自定义适配 - +[7]: Spring Cloud 原生注册中心,除 Eureka、Zookeeper、Consul 之外,还包括 Spring Cloud Alibaba 中的 Nacos +[8]: Dubbo 原生注册中心 - +[9]: Alibaba Sentinel:Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性 - ,目前 Sentinel 已被 Spring Cloud 项目纳为 Circuit Breaker 的候选实现 - +[10]:Spring Cloud Sleuth - +[11]: Zipkin - \ No newline at end of file From b53460d6093d222f0e0202804c24ad25c8673a3f Mon Sep 17 00:00:00 2001 From: mercyblitz Date: Wed, 24 Apr 2019 17:32:04 +0800 Subject: [PATCH 3/7] Update Document --- spring-cloud-alibaba-dubbo/README_CN.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/spring-cloud-alibaba-dubbo/README_CN.md b/spring-cloud-alibaba-dubbo/README_CN.md index 4d439b4ac..177caaa55 100644 --- a/spring-cloud-alibaba-dubbo/README_CN.md +++ b/spring-cloud-alibaba-dubbo/README_CN.md @@ -27,13 +27,23 @@ Dubbo Spring Cloud 首个 Preview Release,随同 Spring Cloud Alibaba `0.2.2.R [1]: 从 2.7.0 开始,Dubbo Spring Boot 与 Dubbo 在版本上保持一致 + [2]: Preview releases of Spring Cloud Alibaba are available: 0.9.0, 0.2.2, and 0.1.2 - + [3]: 目前最新的 Spring Cloud “F” 版的版本为:`Finchley.SR2` - + [4]: 当前Spring Cloud “G” 版为 `Greenwich.RELEASE` + [5]: Spring Cloud 特性列表 - + [6]: Dubbo 2.7 开始支持配置中心,可自定义适配 - + [7]: Spring Cloud 原生注册中心,除 Eureka、Zookeeper、Consul 之外,还包括 Spring Cloud Alibaba 中的 Nacos + [8]: Dubbo 原生注册中心 - + [9]: Alibaba Sentinel:Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性 - ,目前 Sentinel 已被 Spring Cloud 项目纳为 Circuit Breaker 的候选实现 - + [10]:Spring Cloud Sleuth - + [11]: Zipkin - \ No newline at end of file From f8d1c7e3c9403beb651ef03aba494811708b16a9 Mon Sep 17 00:00:00 2001 From: mercyblitz Date: Wed, 24 Apr 2019 21:00:13 +0800 Subject: [PATCH 4/7] Polish spring-cloud-incubator/spring-cloud-alibaba#589 --- .../DubboServiceMetadataRepository.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/repository/DubboServiceMetadataRepository.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/repository/DubboServiceMetadataRepository.java index cf32659e1..37ca2e245 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/repository/DubboServiceMetadataRepository.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/repository/DubboServiceMetadataRepository.java @@ -35,6 +35,7 @@ import org.springframework.cloud.alibaba.dubbo.service.DubboMetadataServiceProxy import org.springframework.cloud.alibaba.dubbo.util.JSONUtils; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.cloud.commons.util.InetUtils; import org.springframework.http.HttpRequest; import org.springframework.stereotype.Repository; import org.springframework.util.CollectionUtils; @@ -49,6 +50,7 @@ import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -149,6 +151,9 @@ public class DubboServiceMetadataRepository { @Autowired private JSONUtils jsonUtils; + @Autowired + private InetUtils inetUtils; + @Value("${spring.application.name}") private String currentApplicationName; @@ -275,7 +280,15 @@ public class DubboServiceMetadataRepository { } public void exportURL(URL url) { - this.allExportedURLs.add(url.getServiceKey(), url); + URL actualURL = url; + InetUtils.HostInfo hostInfo = inetUtils.findFirstNonLoopbackHostInfo(); + String ipAddress = hostInfo.getIpAddress(); + // To use InetUtils to set IP if they are different + // issue : https://github.com/spring-cloud-incubator/spring-cloud-alibaba/issues/589 + if (!Objects.equals(url.getHost(), ipAddress)) { + actualURL = url.setAddress(hostInfo.getIpAddress()); + } + this.allExportedURLs.add(actualURL.getServiceKey(), actualURL); } public void unexportURL(URL url) { From 49c6fedfe4d8737e287a30368863094f7ac2d4d0 Mon Sep 17 00:00:00 2001 From: mercyblitz Date: Wed, 24 Apr 2019 21:02:19 +0800 Subject: [PATCH 5/7] Polish spring-cloud-incubator/spring-cloud-alibaba#589 --- .../metadata/repository/DubboServiceMetadataRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/repository/DubboServiceMetadataRepository.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/repository/DubboServiceMetadataRepository.java index 37ca2e245..33f237df8 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/repository/DubboServiceMetadataRepository.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/repository/DubboServiceMetadataRepository.java @@ -286,7 +286,7 @@ public class DubboServiceMetadataRepository { // To use InetUtils to set IP if they are different // issue : https://github.com/spring-cloud-incubator/spring-cloud-alibaba/issues/589 if (!Objects.equals(url.getHost(), ipAddress)) { - actualURL = url.setAddress(hostInfo.getIpAddress()); + actualURL = url.setHost(ipAddress); } this.allExportedURLs.add(actualURL.getServiceKey(), actualURL); } From d3d11725086a7ba74d67a43e744aeaebd346d221 Mon Sep 17 00:00:00 2001 From: mercyblitz Date: Wed, 24 Apr 2019 21:09:39 +0800 Subject: [PATCH 6/7] Polish spring-cloud-incubator/spring-cloud-alibaba#591 --- .../repository/DubboServiceMetadataRepository.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/repository/DubboServiceMetadataRepository.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/repository/DubboServiceMetadataRepository.java index 33f237df8..43f1590fd 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/repository/DubboServiceMetadataRepository.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/repository/DubboServiceMetadataRepository.java @@ -293,9 +293,12 @@ public class DubboServiceMetadataRepository { public void unexportURL(URL url) { String key = url.getServiceKey(); + // NPE issue : https://github.com/spring-cloud-incubator/spring-cloud-alibaba/issues/591 List urls = allExportedURLs.get(key); - urls.remove(url); - this.allExportedURLs.addAll(key, urls); + if (!isEmpty(urls)) { + urls.remove(url); + allExportedURLs.addAll(key, urls); + } } /** From 6ccc3e25d667dec9bbe702a38b76b48d277d304a Mon Sep 17 00:00:00 2001 From: mercyblitz Date: Thu, 25 Apr 2019 16:30:55 +0800 Subject: [PATCH 7/7] Update Samples and Documents --- .../README_CN.md | 348 ++++++++++++++++++ .../pom.xml | 194 ++++------ .../spring-cloud-dubbo-client-sample/pom.xml | 70 ++++ .../DubboSpringCloudClientBootstrap.java | 47 +++ .../src/main/resources/bootstrap.yaml | 19 + .../pom.xml | 34 +- .../pom.xml | 34 +- .../pom.xml | 26 +- .../src/main/resources/application.yaml | 9 +- .../spring-cloud-dubbo-sample-api/pom.xml | 16 + .../alibaba/dubbo/service/EchoService.java | 25 ++ .../spring-cloud-dubbo-server-sample/pom.xml | 67 ++++ .../DubboSpringCloudServerBootstrap.java | 45 +++ .../src/main/resources/bootstrap.yaml | 25 ++ .../pom.xml | 31 +- 15 files changed, 861 insertions(+), 129 deletions(-) create mode 100644 spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/README_CN.md create mode 100644 spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/pom.xml create mode 100644 spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudClientBootstrap.java create mode 100644 spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/resources/bootstrap.yaml create mode 100644 spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/EchoService.java create mode 100644 spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/pom.xml create mode 100644 spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudServerBootstrap.java create mode 100644 spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/src/main/resources/bootstrap.yaml diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/README_CN.md b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/README_CN.md new file mode 100644 index 000000000..8cd9fb05a --- /dev/null +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/README_CN.md @@ -0,0 +1,348 @@ +# Dubbo Spring Cloud 示例工程 + + +## 快速开始 + +### 定义 Dubbo 服务接口 + +Dubbo 服务接口是服务提供方与消费方的远程通讯契约,通常由普通的 Java 接口(interface)来声明,如 `EchoService` 接口: + +```java +public interface EchoService { + + String echo(String message); +} +``` + +为了确保契约的一致性,推荐的做法是将 Dubbo 服务接口打包在第二方或者第三方的 artifact(jar)中,如以上接口就存放在 + artifact [spring-cloud-dubbo-sample-api](https://github.com/spring-cloud-incubator/spring-cloud-alibaba/tree/master/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api) 之中。 +对于服务提供方而言,不仅通过依赖 artifact 的形式引入 Dubbo 服务接口,而且需要将其实现。对应的服务消费端,同样地需要依赖该 artifact, +并以接口调用的方式执行远程方法。接下来进一步讨论怎样实现 Dubbo 服务提供方和消费方。 + + +### 实现 Dubbo 服务提供方 + + + +#### 初始化 `spring-cloud-dubbo-server-sample` Maven 工程 + +首先,创建 `artifactId` 名为 `spring-cloud-dubbo-server-sample` 的 Maven 工程,并在其 `pom.xml` 文件中增添 +Dubbo Spring Cloud 必要的依赖: + +```xml + + + + org.springframework.cloud + spring-cloud-dubbo-sample-api + ${project.version} + + + + + org.springframework.boot + spring-boot-actuator + + + + + org.springframework.cloud + spring-cloud-starter-dubbo + + + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-discovery + + +``` + +以上依赖 artifact 说明如下: + +- `spring-cloud-dubbo-sample-api` : 提供 `EchoService` 接口的 artifact +- `spring-boot-actuator` : Spring Boot Production-Ready artifact,间接引入 `spring-boot` artifact +- `spring-cloud-starter-dubbo` : Dubbo Spring Cloud Starter `artifact`,间接引入 `dubbo-spring-boot-starter` 等 artifact +- `spring-cloud-starter-alibaba-nacos-discovery` : Nacos Spring Cloud 服务注册与发现 `artifact` + + +值得注意的是,以上 artifact 未指定版本(version),因此,还需显示地声明 `` : + +```xml + + + + + org.springframework.cloud + spring-cloud-alibaba-dependencies + 0.9.0.RELEASE + pom + import + + + +``` + +> 以上完整的 Maven 依赖配置,请参考 `spring-cloud-dubbo-server-sample` [`pom.xml`](spring-cloud-dubbo-server-sample/pom.xml) 文件 + +完成以上步骤之后,下一步则是实现 Dubbo 服务 + + +#### 实现 Dubbo 服务 + +`EchoService` 作为暴露的 Dubbo 服务接口,服务提供方 `spring-cloud-dubbo-server-sample` 需要将其实现: + +```java +@org.apache.dubbo.config.annotation.Service +class EchoServiceImpl implements EchoService { + + @Override + public String echo(String message) { + return "[echo] Hello, " + message; + } +} +``` + +其中,`@org.apache.dubbo.config.annotation.Service` 是 Dubbo 服务注解,仅声明该 Java 服务(本地)实现为 Dubbo 服务。 +因此,下一步需要将其配置 Dubbo 服务(远程)。 + + + +#### 配置 Dubbo 服务提供方 + +在暴露 Dubbo 服务方面,推荐开发人员外部化配置的方式,即指定 Java 服务实现类的扫描基准包。 +> Dubbo Spring Cloud 继承了 Dubbo Spring Boot 的外部化配置特性,也可以通过标注 `@DubboComponentScan` 来实现基准包扫描。 + +同时,Dubbo 远程服务需要暴露网络端口,并设定通讯协议,完整的 YAML 配置如下所示: + +```yaml +dubbo: + scan: + # dubbo 服务扫描基准包 + base-packages: org.springframework.cloud.alibaba.dubbo.bootstrap + protocol: + # dubbo 协议 + name: dubbo + # dubbo 协议端口( -1 表示自增端口,从 20880 开始) + port: -1 + registry: + # 挂载到 Spring Cloud 注册中心 + address: spring-cloud://localhost + +spring: + application: + # Dubbo 应用名称 + name: spring-cloud-alibaba-dubbo-server + main: + # Spring Boot 2.1 需要设定 + allow-bean-definition-overriding: true + cloud: + nacos: + # Nacos 服务发现与注册配置 + discovery: + server-addr: 127.0.0.1:8848 +``` + +以上 YAML 内容,上半部分为 Dubbo 的配置: + +- `dubbo.scan.base-packages` : 指定 Dubbo 服务实现类的扫描基准包 +- `dubbo.protocol` : Dubbo 服务暴露的协议配置,其中子属性 `name` 为协议名称,`port` 为协议端口( -1 表示自增端口,从 20880 开始) +- `dubbo.registry` : Dubbo 服务注册中心配置,其中子属性 `address` 的值 "spring-cloud://localhost",说明挂载到 Spring Cloud 注册中心 +> 当前 Dubbo Spring Cloud 实现必须配置 `dubbo.registry.address = spring-cloud://localhost`,下一个版本将其配置变为可选 +(参考 [issue #592](https://github.com/spring-cloud-incubator/spring-cloud-alibaba/issues/592)), +> 并且支持传统 Dubbo 协议的支持(参考 [issue #588](https://github.com/spring-cloud-incubator/spring-cloud-alibaba/issues/588)) + +下半部分则是 Spring Cloud 相关配置: + +- `spring.application.name` : Spring 应用名称,用于 Spring Cloud 服务注册和发现。 +> 该值在 Dubbo Spring Cloud 加持下被视作 `dubbo.application.name`,因此,无需再显示地配置 `dubbo.application.name` +- `spring.main.allow-bean-definition-overriding` : 在 Spring Boot 2.1 以及更高的版本增加该设定, +因为 Spring Boot 默认调整了 Bean 定义覆盖行为。(推荐一个好的 Dubbo 讨论 [issue #3193](https://github.com/apache/incubator-dubbo/issues/3193#issuecomment-474340165)) +- `spring.cloud.nacos.discovery` : Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口 + +> 以上完整的 YAML 配置文件,请参考 `spring-cloud-dubbo-server-sample` [`bootstrap.yaml`](spring-cloud-dubbo-server-sample/src/main/resources/bootstrap.yaml) 文件 + + +完成以上步骤后,还需编写一个 Dubbo Spring Cloud 引导类。 + + +#### 引导 Dubbo Spring Cloud 服务提供方应用 + +Dubbo Spring Cloud 引导类与普通 Spring Cloud 应用并无差别,如下所示: +```java +@EnableDiscoveryClient +@EnableAutoConfiguration +public class DubboSpringCloudServerBootstrap { + + public static void main(String[] args) { + SpringApplication.run(DubboSpringCloudServerBootstrap.class); + } +} +``` + +在引导 `DubboSpringCloudServerBootstrap` 之前,请提前启动 Nacos 服务器。 +当 `DubboSpringCloudServerBootstrap` 启动后,将应用 `spring-cloud-dubbo-server-sample` 将出现在 Nacos 控制台界面。 + + +当 Dubbo 服务提供方启动后,下一步实现一个 Dubbo 服务消费方。 + + + +### 实现 Dubbo 服务消费方 + +由于 Java 服务就 `EchoService`、服务提供方应用 `spring-cloud-dubbo-server-sample` 以及 Nacos 服务器均已准备完毕。Dubbo 服务消费方 +只需初始化服务消费方 Maven 工程 `spring-cloud-dubbo-client-sample` 以及消费 Dubbo 服务。 + + + +#### 初始化 `spring-cloud-dubbo-client-sample` Maven 工程 + +与服务提供方 Maven 工程类,需添加相关 Maven 依赖: + +```xml + + + + + org.springframework.cloud + spring-cloud-alibaba-dependencies + 0.9.0.RELEASE + pom + import + + + + + + + + org.springframework.cloud + spring-cloud-dubbo-sample-api + ${project.version} + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-actuator + + + + + org.springframework.cloud + spring-cloud-starter-dubbo + + + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-discovery + + +``` + +与应用 `spring-cloud-dubbo-server-sample` 不同的是,当前应用依赖 `spring-boot-starter-web`,表明它属于 Web Servlet 应用。 + +> 以上完整的 Maven 依赖配置,请参考 `spring-cloud-dubbo-client-sample` [`pom.xml`](spring-cloud-dubbo-client-sample/pom.xml) 文件 + + +#### 配置 Dubbo 服务消费方 + +Dubbo 服务消费方配置与服务提供方类似,当前应用 `spring-cloud-dubbo-client-sample` 属于纯服务消费方,因此,所需的外部化配置更精简: + +```yaml +dubbo: + registry: + # 挂载到 Spring Cloud 注册中心 + address: spring-cloud://localhost + cloud: + subscribed-services: spring-cloud-alibaba-dubbo-server + +spring: + application: + # Dubbo 应用名称 + name: spring-cloud-alibaba-dubbo-client + main: + # Spring Boot 2.1 需要设定 + allow-bean-definition-overriding: true + cloud: + nacos: + # Nacos 服务发现与注册配置 + discovery: + server-addr: 127.0.0.1:8848 +``` + +对比应用 `spring-cloud-dubbo-server-sample`,除应用名称 `spring.application.name` 存在差异外,`spring-cloud-dubbo-client-sample` +新增了属性 `dubbo.cloud.subscribed-services` 的设置。并且该值为服务提供方应用 "spring-cloud-dubbo-server-sample"。 + +- `dubbo.cloud.subscribed-services` : 用于服务消费方订阅服务提供方的应用名称的列表,若需订阅多应用,使用 "," 分割。 +不推荐使用默认值为 "*",它将订阅所有应用。 +> 当应用使用属性 `dubbo.cloud.subscribed-services` 默认值时,日志中将会输出一行警告: +> > Current application will subscribe all services(size:x) in registry, a lot of memory and CPU cycles may be used, +> > thus it's strongly recommend you using the externalized property 'dubbo.cloud.subscribed-services' to specify the services + +由于当前应用属于 Web 应用,它会默认地使用 8080 作为 Web 服务端口,如果需要自定义,可通过属性 `server.port` 调整。 + +> 以上完整的 YAML 配置文件,请参考 `spring-cloud-dubbo-client-sample` [`bootstrap.yaml`](spring-cloud-dubbo-client-sample/src/main/resources/bootstrap.yaml) 文件 + + + +#### 引导 Dubbo Spring Cloud 服务消费方应用 + +为了减少实现步骤,以下引导类将 Dubbo 服务消费以及引导功能合二为一: + +```java +@EnableDiscoveryClient +@EnableAutoConfiguration +@RestController +public class DubboSpringCloudClientBootstrap { + + @Reference + private EchoService echoService; + + @GetMapping("/echo") + public String echo(String message) { + return echoService.echo(message); + } + + public static void main(String[] args) { + SpringApplication.run(DubboSpringCloudClientBootstrap.class); + } +} +``` + +不仅如此,`DubboSpringCloudClientBootstrap` 也作为 REST Endpoint,通过暴露 `/echo` Web 服务,消费 Dubbo `EchoService` 服务。因此, +可通过 `curl` 命令执行 HTTP GET 方法: + +``` +$ curl http://127.0.0.1:8080/echo?message=%E5%B0%8F%E9%A9%AC%E5%93%A5%EF%BC%88mercyblitz%EF%BC%89 +``` + +HTTP 响应为: + +``` +[echo] Hello, 小马哥(mercyblitz) +``` + +以上结果说明应用 `spring-cloud-dubbo-client-sample` 通过消费 Dubbo 服务,返回服务提供方 `spring-cloud-dubbo-server-sample` +运算后的内容。 + +以上操作就一套完整的 Dubbo 服务提供方和消费方的运用,更多的详情请直接参考模块: +- [`spring-cloud-dubbo-server-sample` ](spring-cloud-dubbo-server-sample) +- [`spring-cloud-dubbo-client-sample`](spring-cloud-dubbo-client-sample) + + + + +## 模块说明 + +- [spring-cloud-dubbo-sample-api](spring-cloud-dubbo-sample-api):API 模块,存放 Dubbo 服务接口和模型定义 +- [spring-cloud-dubbo-provider-web-sample](spring-cloud-dubbo-provider-web-sample):Dubbo Spring Cloud 服务提供方示例(Web 应用) +- [spring-cloud-dubbo-provider-sample](spring-cloud-dubbo-provider-sample):Dubbo Spring Cloud 服务提供方示例(非 Web 应用) +- [spring-cloud-dubbo-consumer-sample](spring-cloud-dubbo-consumer-sample):Dubbo Spring Cloud 服务消费方示例 +- [spring-cloud-dubbo-servlet-gateway](spring-cloud-dubbo-servlet-gateway)-sample:Dubbo Spring Cloud Servlet 网关简易实现示例 \ No newline at end of file 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 index cdd1018a4..fc970a7f3 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/pom.xml @@ -3,20 +3,23 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - spring-cloud-alibaba-examples org.springframework.cloud - 0.9.1.BUILD-SNAPSHOT - ../pom.xml + spring-cloud-build + 2.1.3.RELEASE + 4.0.0 org.springframework.cloud spring-cloud-alibaba-dubbo-examples + 0.9.1.BUILD-SNAPSHOT Spring Cloud Alibaba Dubbo Examples pom spring-cloud-dubbo-sample-api + spring-cloud-dubbo-server-sample + spring-cloud-dubbo-client-sample spring-cloud-dubbo-provider-sample spring-cloud-dubbo-consumer-sample spring-cloud-dubbo-provider-web-sample @@ -24,129 +27,80 @@ - 2.7.0 + 2.7.1 + 2.1.1.RELEASE + 2.1.1.RELEASE + 2.1.1.RELEASE 2.1.1.RELEASE 2.1.1.RELEASE 4.0.1 - - - - - - org.springframework.boot - spring-boot-dependencies - ${spring-boot.version} - pom - import - - - - - org.apache.dubbo - 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-dubbo - ${project.version} - - - - - org.springframework.cloud - spring-cloud-starter-alibaba-nacos-discovery - - - - - org.springframework.cloud - spring-cloud-starter-netflix-eureka-client - - - - - org.springframework.cloud - spring-cloud-starter-zookeeper-discovery - ${spring-cloud-zookeeper.version} - - + + + + eureka + + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + ${spring-cloud-netflix.version} + + + + + + + zookeeper + + + + org.springframework.cloud + spring-cloud-starter-zookeeper-discovery + ${spring-cloud-zookeeper.version} + + + org.apache.zookeeper + zookeeper + + + + + org.apache.zookeeper zookeeper - - - - - - org.apache.zookeeper - zookeeper - 3.4.12 - true - - - org.slf4j - slf4j-log4j12 - - - - - - org.apache.curator - curator-framework - ${curator.version} - - - - - org.springframework.cloud - spring-cloud-starter-consul-discovery - ${spring-cloud-consul.version} - - + 3.4.12 + true + + + org.slf4j + slf4j-log4j12 + + + + + + org.apache.curator + curator-framework + ${curator.version} + + + + + + consul + + + + org.springframework.cloud + spring-cloud-starter-consul-discovery + ${spring-cloud-consul.version} + + + + + @@ -159,6 +113,4 @@ - - \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/pom.xml new file mode 100644 index 000000000..1247cc082 --- /dev/null +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/pom.xml @@ -0,0 +1,70 @@ + + + + org.springframework.cloud + spring-cloud-build + 2.1.3.RELEASE + + + 4.0.0 + + spring-cloud-dubbo-client-sample + Spring Cloud Dubbo Client Sample + 0.9.1.BUILD-SNAPSHOT + + + + + + org.springframework.cloud + spring-cloud-alibaba-dependencies + 0.9.0.RELEASE + pom + import + + + + + + + + org.springframework.cloud + spring-cloud-dubbo-sample-api + ${project.version} + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-actuator + + + + + org.springframework.cloud + spring-cloud-starter-dubbo + + + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudClientBootstrap.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudClientBootstrap.java new file mode 100644 index 000000000..18a8fff27 --- /dev/null +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudClientBootstrap.java @@ -0,0 +1,47 @@ +/* + * 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 org.apache.dubbo.config.annotation.Reference; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.cloud.alibaba.dubbo.service.EchoService; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * Dubbo Spring Cloud Client Bootstrap + */ +@EnableDiscoveryClient +@EnableAutoConfiguration +@RestController +public class DubboSpringCloudClientBootstrap { + + @Reference + private EchoService echoService; + + @GetMapping("/echo") + public String echo(String message) { + return echoService.echo(message); + } + + public static void main(String[] args) { + SpringApplication.run(DubboSpringCloudClientBootstrap.class); + } +} diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/resources/bootstrap.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/resources/bootstrap.yaml new file mode 100644 index 000000000..349ec7351 --- /dev/null +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/resources/bootstrap.yaml @@ -0,0 +1,19 @@ +dubbo: + registry: + # 挂载到 Spring Cloud 注册中心 + address: spring-cloud://localhost + cloud: + subscribed-services: spring-cloud-alibaba-dubbo-server + +spring: + application: + # Dubbo 应用名称 + name: spring-cloud-alibaba-dubbo-client + main: + # Spring Boot 2.1 需要设定 + allow-bean-definition-overriding: true + cloud: + nacos: + # Nacos 服务发现与注册配置 + discovery: + server-addr: 127.0.0.1:8848 \ 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 index 9cffeb29a..472be6e8e 100644 --- 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 @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - spring-cloud-alibaba-dubbo-examples org.springframework.cloud + spring-cloud-alibaba-dubbo-examples 0.9.1.BUILD-SNAPSHOT ../pom.xml @@ -14,6 +14,27 @@ spring-cloud-dubbo-consumer-sample Spring Cloud Dubbo Consumer Sample + + + + + org.springframework.cloud + spring-cloud-alibaba-dependencies + ${project.version} + pom + import + + + + org.springframework.cloud + spring-cloud-openfeign-dependencies + ${spring-cloud-openfeign.version} + pom + import + + + + @@ -40,6 +61,17 @@ ${project.version} + + + org.springframework.cloud + spring-cloud-starter-dubbo + + + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-discovery + 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 index 4f44d8e05..44553166e 100644 --- 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 @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - spring-cloud-alibaba-dubbo-examples org.springframework.cloud + spring-cloud-alibaba-dubbo-examples 0.9.1.BUILD-SNAPSHOT ../pom.xml @@ -14,6 +14,26 @@ spring-cloud-dubbo-provider-sample Spring Cloud Dubbo Provider Sample + + + + + org.springframework.cloud + spring-cloud-alibaba-dependencies + ${project.version} + pom + import + + + + org.apache.dubbo + dubbo-bom + ${dubbo.version} + pom + import + + + @@ -37,6 +57,18 @@ ${project.version} + + + org.springframework.cloud + spring-cloud-starter-dubbo + + + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-discovery + + io.netty diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/pom.xml index a723247a8..d585e181a 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/pom.xml @@ -3,8 +3,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - spring-cloud-alibaba-dubbo-examples org.springframework.cloud + spring-cloud-alibaba-dubbo-examples 0.9.1.BUILD-SNAPSHOT ../pom.xml @@ -14,6 +14,19 @@ spring-cloud-dubbo-provider-web-sample Spring Cloud Dubbo Provider Web Sample + + + + + org.springframework.cloud + spring-cloud-alibaba-dependencies + ${project.version} + pom + import + + + + @@ -34,6 +47,17 @@ ${project.version} + + + org.springframework.cloud + spring-cloud-starter-dubbo + + + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-discovery + diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/application.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/application.yaml index 3fddfbdbe..de4a8666d 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/application.yaml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/application.yaml @@ -5,11 +5,14 @@ dubbo: dubbo: name: dubbo port: -1 - registry: + registries: + new: + address: spring-cloud://localhost +# registry: # The Spring Cloud Dubbo's registry extension - address: spring-cloud://localhost +# address: spring-cloud://localhost # The traditional Dubbo's registry -# address: zookeeper://127.0.0.1:2181 +# address: nacos://127.0.0.1:8848 feign: hystrix: 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 index bf351bf23..146bb2621 100644 --- 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 @@ -13,4 +13,20 @@ spring-cloud-dubbo-sample-api Spring Cloud Dubbo Sample API + + + + org.slf4j + slf4j-api + 1.7.25 + + + + + org.apache.dubbo + dubbo + ${dubbo.version} + + + \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/EchoService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/EchoService.java new file mode 100644 index 000000000..ef2fa2871 --- /dev/null +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/EchoService.java @@ -0,0 +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. + */ +package org.springframework.cloud.alibaba.dubbo.service; + +/** + * Echo Service + */ +public interface EchoService { + + String echo(String message); +} diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/pom.xml new file mode 100644 index 000000000..5ab588fd1 --- /dev/null +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/pom.xml @@ -0,0 +1,67 @@ + + + + org.springframework.cloud + spring-cloud-build + 2.1.3.RELEASE + + + + 4.0.0 + + spring-cloud-dubbo-server-sample + Spring Cloud Dubbo Server Sample + 0.9.1.BUILD-SNAPSHOT + + + + + + org.springframework.cloud + spring-cloud-alibaba-dependencies + 0.9.0.RELEASE + pom + import + + + + + + + + + org.springframework.cloud + spring-cloud-dubbo-sample-api + ${project.version} + + + + + org.springframework.boot + spring-boot-actuator + + + + + org.springframework.cloud + spring-cloud-starter-dubbo + + + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudServerBootstrap.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudServerBootstrap.java new file mode 100644 index 000000000..5d943730c --- /dev/null +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudServerBootstrap.java @@ -0,0 +1,45 @@ +/* + * 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 org.apache.dubbo.config.annotation.Service; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.cloud.alibaba.dubbo.service.EchoService; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +/** + * Dubbo Spring Cloud Server Bootstrap + */ +@EnableDiscoveryClient +@EnableAutoConfiguration +public class DubboSpringCloudServerBootstrap { + + public static void main(String[] args) { + SpringApplication.run(DubboSpringCloudServerBootstrap.class); + } +} + +@Service +class EchoServiceImpl implements EchoService { + + @Override + public String echo(String message) { + return "[echo] Hello, " + message; + } +} \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/src/main/resources/bootstrap.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/src/main/resources/bootstrap.yaml new file mode 100644 index 000000000..54cd459dc --- /dev/null +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/src/main/resources/bootstrap.yaml @@ -0,0 +1,25 @@ +dubbo: + scan: + # dubbo 服务扫描基准包 + base-packages: org.springframework.cloud.alibaba.dubbo.bootstrap + protocol: + # dubbo 协议 + name: dubbo + # dubbo 协议端口( -1 表示自增端口) + port: -1 + registry: + # 挂载到 Spring Cloud 注册中心 + address: spring-cloud://localhost + +spring: + application: + # Dubbo 应用名称 + name: spring-cloud-alibaba-dubbo-server + main: + # Spring Boot 2.1 需要设定 + allow-bean-definition-overriding: true + cloud: + nacos: + # Nacos 服务发现与注册配置 + discovery: + server-addr: 127.0.0.1:8848 \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/pom.xml index 7381dee76..bf3353d78 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/pom.xml @@ -14,6 +14,27 @@ spring-cloud-dubbo-servlet-gateway-sample Spring Cloud Dubbo Servlet Gateway Sample + + + + + org.springframework.cloud + spring-cloud-alibaba-dependencies + ${project.version} + pom + import + + + + org.springframework.cloud + spring-cloud-openfeign-dependencies + ${spring-cloud-openfeign.version} + pom + import + + + + @@ -28,10 +49,16 @@ ${project.version} - + + + org.springframework.cloud + spring-cloud-starter-dubbo + + + org.springframework.cloud - spring-cloud-starter-openfeign + spring-cloud-starter-alibaba-nacos-discovery