Dubbo 3.0 前瞻:重塑 Spring Cloud 服务治理

Dubbo 3.0 前瞻:重塑 Spring Cloud 服务治理

作者 | 小马哥

导读:Dubbo 社区策划了【Dubbo 云原生之路】系列文章,和大家一起回顾 Apache Dubbo 产品和社区的发展,并展望未来发展。系列文章主要涵盖 Dubbo 技术解读、社区运营、应用案例解析三大部分。本文为系列第 3 篇。

前言

在 Java 微服务生态中,Spring Cl$ M noud成为了开发人员的首选技术栈,然而随着实践的深入和运用规模的扩大,大家逐渐意识到 Spring Cloud 的局限性。

服务治理方面,# 6 # G m `相较于Dubbo而言,Spring Cloud 并不成熟。遗憾的是S - z o 4 @ / &,Dubbs K H : so 往往被部分开发者片面地视作服务治理的 RPCm } R 框架,而非微服务基础设施。即使是那些有意将 Spring Cloud 迁移至 Dubbo 的小伙伴,当面对其中迁移和改造p s M I 6 ` } s的成本时,难免望而却步。

庆幸的是,Dubbo 3.0 的到来将给这一局面带来重要变革,未来 Dubbo Spring Cl; ! v n N U [oud 将无缝对接 Dubbo 3.0 ,作为S5 R * 2 a ipring Cloud Alibaba的最核心组件,完全地拥抱 Spring Cloud 技术栈,不但无缝地整合 Spring Cloud 注册中心,包括Nacos、Eureka、Zookeeper以j I b V } Z t及Con$ i R D ^ J Lsul,而且完D } h R : s全地兼容Spring Cloud Open Feign以及 @LoA $ ]adBalanced RestTemplate,本文将讨论 Dubbo Spring Cloud 对 Spring Cloud 技术栈所带来的革命性变化,由于 Spring Cloud 技术栈涵盖的特性众多,因此本文讨论的范围仅限于服务= t L f 4治理部分。

本文作为 Dubbo 3.0 的前瞻,将着重讲解当前版本的 Dubbo Spring Cloud 实现,Dubbo Spring Cloud 得以实现的一个重要基础即是我们前瞻之一提到的应用级服务发现。

应用级服务发现是 Dubbo 3.0 规划中的重要一环,是 Dubbo 与云原生基础设施打通、实现大规模微服务集群的基石。其实 Dubbo 社区早在 2.7o E 7 o 7 c 7 7 2.5 版本开始便探索了应用级服务发现,尝试去优化 Dubbo 的服务发现模型,因此 Dubbo Spz 9 L d Iring Cloud 是基于 Dubbo Spro u g : s ning Boot 2.7.x(从 2.7.0 开始,Dubbo Spring Boot 与 Dubbo 在版本上保持一致)和 Spring Cloud 2.x 开发,而本文也将基于 2.7.x 的这个先期版本展开讲解。

无论开发人员是 Dubbo 用户还是 Spring Cloud 用户,都能轻松地驾驭 Dubbo Spring CloX j ! A p hud,并以接近“零”成本的代价使应用向上迁移。Dubbo Sprc H ? S Q b ming ClouK * g + * F y n Kd 致# T `力于简化 Cloud Native 开发成本,L F t / 3 9提高研发效能以及提升应用性能等目的0 T N ! 7 8 * 2 W

版本支持

由于 Spring 官方宣布 Spring Cloud Edgware(下文简称为 “E” 版) 将在 2019 年 8 月 1 日后停止维护 13,因此,目前 Dubbo Spring Cloud 发布版本并未对 “E” 版提供支持,仅为 “F” 版 和 “) 7 } 3 ! @G” 版开发,同时也建议和鼓励 Spring C[ i 1 G [ V Zloud 用户更新至 “F” 版 或 “G” 版。

同时,Dubbo SpriK k F |ng Cloud 基于 Apach- s T |e Dubbo Spring Bootl S ~ I p U 2.7.x 开发(最低 Java 版本为 1.8),提供完整的 Dubbo 注解驱动、外部化配置以及 Produc8 R B & : F 1tion-Ready 的特性,点击查看详情。

以下表格将说明 Dubbo Spring Cloud 版本关系映射关系:

Spring Cloud Spring Cloud AlibaX , T ? * 2 A v Gba Spri9 D 1ng Boot~ ] H G ? # Dubbo SpO ] = =rin& C d Ng Boot
Finchley 0.2.2.RELEASE 2.0.x 2.7.1
Greenwich 2.2.1 V s.RELEASE 2.1.: w Y G 8 f j bx 2.7.1
EdgwaS + {re 0.1.2.RELEASE 1.5.x :x: Dubbo Spring Cloud 不支持该版本

功能特性

由于 Dubbo Spring Cloud 构建在原生的 Spring Cloud 之上,其服务治理方面的能力可认为是 Spring Cloud Plus,不仅完全覆盖Spring Cloud 原生特性,而且提供更为稳定和成熟的实现,特性比对如下表所示:

功能组件 Spring Clh ^ 4oud Dubl 8 c # c U 1bo Spring^ - ^ z x G 7 Cloud
分布式配置(Distributed configuration) Git、Zookeeper、Consul、JDBC Spring Cloud 分布式配置 + Dubbo 配置中心(Dubbo 2.7 开始支持配置Y $ 7 g B中心,( z G s 1 3 ; _ e可自定义适配)
服务注册与发现(Service regi{ e 6 S 4 5 |stration and discovery) Eur+ 1 n b * $eka、Zo3 w w @ c vokeeper、Consul Spri@ 7 r i $ng Cloud 原生注册中心(S[ 8 . @ / 3pring CloU F [ud 原生注册中心,除 Eureka、Zookeeper、Consul 之外,还包括 Spring Cloud Alibaba 中的 NacoG z o O A 7 ys)p R | , r 4 L p+Dubbo 原生注册中心
负载均衡(Load balancing) Ribbon(随机、轮询等算法) Dubbo 内建实现(随机、轮询等算法 + 权重等特性)
服务熔断(Ci` b 0 #rcuit Breakers) Spring Cloud Hystrix Spri[ i - } ,ng Cloud Hystrix +Alibaba Sentinel 等(Sentinel 已被 Spri9 ? % h 8 % sng Cloud 项目纳为 Circuit Breaker 的候选实现)
i S N d q务调用(Su { ( G o ; B .ervice-to-service calls) Open Feign、Rest% 1 a ? 6 aTemplate SU 3 lpring Cloud 服务调用 + Dubbo@Reference
链路跟踪(Tracing) Spring Cloud Sleuthe [ H v / l J +Zipkin Zipkin、opentracing 等

高亮特性

1)Dubbo 使用 Spring Cloudw e m 服务注册与发现

Dubbo Spring Cloud 基于 Spr% [ g & 5 p Zing Cloud Commons 抽象实现 Dubbo 服务注册与发现,应用只需增添外部化配置属性“dubbo.registry.address = spring-cloud://localhost,就能轻松地桥接到所有原生 Spring Cloud 注册中心,包括:- Nacos - Eureka - Zoi ) 2 1 t wokeeper -( g ? C Consul。

:Dubbo Spring Cloud 将在a F N下个版本支持 Spring Cloud 注册中心与 Dubbc t 3 k & N J w )o 注册中心并存,提供双注册机制,实现无缝迁移。

2)Dubb` , Z q 4 3 R o 作为 Spring Clo X Qud 服务调用

默认情况,Spring Cloud Open Feign 以及@LoadBalancedRestTemplate 作为 Spring Cloud 的两种服务调用方式。Dubbo Spring Cloud 为其提供了第三种选择,即 Dubbo 服务将作为 Spring Cloud 服务调用的同^ E C - l等公民出现,应用x O f i E D可通过 Apache Dubbo 注解 @Service@Reference 暴露和引用 Dubbo 服务,实现服务间多种协议的通讯。同时,也可以利用 Dubbo 泛化接口轻松实现服务网关。

3)Dubbo 服务自省

Dubbo Spring Cloud 引入了全新的服务治理特性 - 服务自省(Service Introspection),其设计目的g w ; `在于最大化减轻注册中心负载,去 Dubbo 注册元信息中心化。假设一个 Spring Cloud 应? : Y Z _ 6 ; )用引入 Dubbo Spring Boot Starter,并暴露 N 个 Dubbo 服务,以Dubbo Nacos 注册中心为例,当前应用将注册 N+1 个 Nacost T # 1 2 1 r 4 应用,除 Spring Cloud 应用本身之前,其余 N 个应用均来T ] e 6 e _ | V自于 Dubbo 服务,当 N 越大时,注册中心负载越重。

因此,Dubbo Spring Cloud 应用对注册中心的负载相当于传统 Dubbo 的 N5 q . . z [ 6 h 5 分之一,在不增加基础设B h !施投入的前提下,理论上,使其集群^ % S t , [ ] m规模扩大 N 倍。当然,未来的 Dubbo 也将提供服务自省的能力。

44 r I t = x w ()Dubbo 迁移 Spring Cloud 服务调用

尽管 Dubbo Spring Cloud 完全地保留了原生 Spring Cloud 服: q B j务调用特性,但是 Dubbo 服务治理的能力是 Spring ClZ Q X z p M R i $oud Opg 4 ~ ? ] - ken Feign 所不及的,如高性能、高可用以及负载均衡稳定性等方面。因此,建议开发人员将 Spring Cloud Open Feign 或者 @LoadBalancedRes9 u t _ N ; L t ptTemplaq V Ute 迁移为 Dubbo 服务。

考虑到迁移过程并非一蹴而就,因此,Dubbo Spring Cloud 提供了方案,即 @DubboTraM C ^ R # B !nsp@ s % ^ /orted 注解。该注解能t / 2 /够帮助服务消费端的 Spring Cloud Op4 d V 7 U ! L Wen Feign 接口以及 @LoadBalanced RestTemplate Bean 底层走 Dubbo 调用(可切换 Dubbo 支持的协议),而服务提供方则只1 F a w x ; %需在原有 @RestCoc H @ntroller 类上追加 Dubbo @Servce 注解(需要抽取接口)即可,换言之,在不调整 Feign 接口` ] ~ c d以及 RestTemplate URL 的前提下,实现无缝迁移。如果迁移时间充分的话,建议使用 Dubbo 服务重构系统中的原生 Spring Cloud 服务的定义。

简单示例

开发 Dubbo Spring Cloud 应用的方法与传统 Dubbo 或 Spring Cloud 应用类似,按照以下步骤就能完整地实现Dubbo 服务提供z D I o ? ; B方和消费方的应用,完整的示例E ` z G代码请访问一下资源:

  • Dubbo 服务提供方应用
  • Dubbo 服务消费方应用

1. 定义 Dubbo 服务接口

Dubbo 服务接口是服务提供方与消费方[ ! ^ [ t 的远程通讯契约,通常由普通的 Java 接口(interface)来声明,如EchoService 接口:

public interface EchoService {
String echo(String message);
}

为了确保契约的一致性,N w 0 t J J推荐的做法是将 Du l + C L m Z Lubbo 服务接口打包在第二方或者第三方的 artifact(jar)中,如以上接口就存放在 artifac] 9 s f vtspring-cl` d 2 0 1 o boud-dubbo-sampl & _ ^ o ! Z 6le-api之中。

对于服务提供方而言,不仅通过依赖 artifact 的形式引入 Dubbo 服务接口,而且需要将其实现。对应的服务消费端,同样地需要依赖该 artifact,并以接口调用的方式执行远程方法。接下来进一步讨论怎样实现 Dubbo 服务提供$ $ @ u | X v方和消Y h j -费方。

2. 实现 Dubbo 服务提供方

1)初始化 spring-clo6 y + F S Xud-dubbo-server-sample Maven 工程

首先,创建 artifactId 名为 spring-cloud-dubbo-server-sampleMaven 工程,并p ` U d j Z S在其 pom.xml 文件中增添 Dubbo Spring C6 G U ` N 0 f y {loud 必要的依赖:

<depA A | t ] , * Eendencies>
<!-- Sau v N Z + C L N Dmple API -->
<dependencr % fy>
&l B 1 Ylt;groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dubbos / Z j f | T-sample-api</artifactId>
<version>${project.version}</version>
</de4 a I 8 k 9 ~ a Apendency>
<!-- Spring Boot dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boo : J l $t-actuator</artifactId>H X P E
</dependency&g3 * . W Q ` x 9 At;
<!-- Dubbo Spring Cloud Starter -->
<dependency>
<groupId>org.spk G 1 w %ringframework.cloud</groupId>
<artifactE k : ^ ] B = r _Id>spring-cloud-starter-dubbo&l% ! O y ( s 8 `t;/artifactId>
</dependency>
<!-- S0 k n * 1 _pring Cloud Nacos Service Discovery -->i J _ a w ~  C
<dependency>
<groupId>org.springframework.cloud</gror /  J { ^upId>
<artifactId>spring-cloud-starter-alibaba-nacos-dC E G Z |iscoQ ^ b B - W O ~ dvery</artifactId>
</dependency>
</dependencie

以上依赖 artifact 说明如下:

  • spring-cloud-dubbo-sample-api: 提供 EchoService 接口的 artifact+ % M % = 6 | v

  • spring-boot-actuator: Spring Boot Produ~ K ] ? rction-ReaQ E 6 Udy artifact,间接引入 spring-boot artifact;

  • spring-clou? g G % % 2 w p {d-starter-dubbo: Dubbo Spring ClV ~ [ V Toud Starter artifact,间接引入 dubbo-spring-boot-starter 等 a@ % M rtifact;

  • spring-cloud-starter-a# r Q h 4 ylibaba-naco/ N os-discovery: Nacos Spring Cloud 服务注册与发d l 1 i ?artifact

值得注意的是,以上 artifact 未指定版本(version),因此,还需显示地声明 &lt;dependencyManagement&gt;:

<depend2 G e l 0 = rencyManagement>
<dependencies>
<K v ( (!-- Spring Cloud$ p 5 o ( Z 7 5 e Alibaba dependencies -->
<dependency>
<groupId>o b 3 5 5 ! y;org.springframework.cloud</groupId>
<artifactId>spring-cloud-k # `alibaba-depeY ) J Z ` Q { endencies</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

:以上完整的 Maven 依赖配置,请参考 spring-cloud-dubbo-server-sample pom.xml 文件。

完成以上步骤之后,下一步则是实现 Dubbo 服务。

2)实现Dubbo 服务

EchoService 作为暴露的 Dubbo 服务接口,服务提供方 spring-cloud-dubbo-server-sample 需要将其实现:

@org.apache.dubbo.config.annotation.Service
class EchoServiceImpl implements EchoService {
@Override
public String echo(String message) {
return "[echo] Hello, "q ? G g e k j + message;
}
}

其中,@org.apache.dB n ; T : }ubbo.config.annotation.Service 是 Dubbo 服务注解,仅声明该 JS c ) C P ~ _ava 服务(} p K B本地)实现为 Dubbo 服务。因此,下一步需要1 h F P R # [ a将其配置 Dubbo 服务(远程)。

3)w J O sE F M p % *置 Dubbo服务提供方

在暴露 Dubbo 服务方面,推荐开发人员外部化配置的方式,即指定 Java 服务实现类的扫描基准包。

:Dubbo Spring Cloud 继承了 Dubb0 N H M R po Spring Boot 的外部化配置特性,也可以通过标注 @DubboComponentScan 来实现基准包扫描。

同时,Dubbo 远程服务需要暴露网络端口,并设定通讯协议,完整的 YAML 配置如下所示:

dubbo:
scan:
# dubbo 服务扫描基准包
b$ H ]ase-A Z # C ypackages: org.springframework.cloud.alibaba.dubbo.bootstrapd d D r F i
protocol:
# dubbo 协议
name: dubboD 4 Z H L I M
# dubbo 协议端口( -1 表示自增端口,从 20880 开始)
port: -1
spring:
application:
# Dubbo 应用名称
name: spring-clouN ) ed-alibaba-dubbo-server
cloud:
nacos:
# Nacos 服务发现与注册配置
discovery:
server-addr: 127.0.0.1:8848

以上 YAML 内容,上半部分为 Dubb# K ! Ao 的配置:

  • dubbo.scan.base-packages: 指定 Dubbo 服务实现类的扫描基准包;

  • dubbo.protocol: Dubbo 服务暴露的协议配置,其中子属性 name 为协议名称,port 为协e h e $ $ x u议端口( -1 表示2 D 9 S 自增端口,从 20880 开始);

  • dubbo.registry: Dubbo 服务注册中心配置,其中子属性 address 的值 "spring-^ = C ( P o I _ ]cloud://localhost",! N # p : ; N )说明挂载到 Spring Cloud 注册中心。

下半部分则是 Spring Cloud 相关配置:

  • spring.application.name: Spring 应用名称,用于 Spring Cloud 服务注册和发现。k m 7 c> 该值在 Dubbo Spring Cloud 加持下被视作 dubbo.application.name,因此,无需再显示地配Z Q 3 x z n + 5dubbo.application.name

  • spring.cloud.nacos.discoveu A : R }ry: Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器w r Y n主机和端口。

以上完整的 YAML 配F | t j / ! C b置文件,请参考 spring-cloud-dubbo-server-samplebootstrap.yaml 文件。

U T g - f R X S &成以上步骤后,还需编+ 9 s l C 7 |写一个 Dubbo Spring Cloud 引导类。

4)引导 Dubbo Spring Cloud 服务提供方应用

Dubbo Spring Cloud 引导类与1 K K D %普通 Spring Cloud 应用并无差别,如下所示:

 @EnableDiscoveryClient @EnableAutoConfiguratioE s 0 K r p [ u (n public class DubboSpringCloudServerBootstrap {Z T K f %
public static void main(Strin| C T n 6 i , [ :g[] args) {
SpringApplication.run(Dubb } Y [ M =oSpringCloudServerBootstrap.class);
}
}

在引导 DubboSpringCloudServerBootstrap 之前,请提前启动 Nacos 服务器。当 DubboSpringCloudServerBootstrap 启动后,将应用 spring-clou5 E _ Q 7 !d-dubbo-& V Z rserver-sample 将出现U k ? H 6 ? 7 )在 Nacos 控制台界面。

当 Dubbo 服务提供方启动后,下{ d k z f z一步实现一个 Dubbo 服务消费方。

3. 实8 j z s 7 4现 Dubbo服务消费方

由于 Java 服务就 EchoService、服务提供方应用 spring-cloud-duM e D @ Vbbo-server-sample 以及 Nacos 服务器均已准备完毕。Dub_ p N ?bo 服务消费方只需初始化服务消费方 Mav* h 2 j & E P d $en 工程 spring-cloud-dubbo-client-sample 以及消费 Dubbo7 ! ) V R 4 s 服务。

1)初始化 spring-3 T *cloud-dubbo-client-sample Maven 工程

与服务提供方 MY A o ;aven 工程类,需添加相关 Maven 依赖:

<dependencyManagement>
<dei ) s k T ~ 3pendencies>
<!-- Spring Cloud Alibaba dependencies -->s N ? T x D;
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>sprip 1 : l A S c u Zng-cloud-alibaba-dependencies</artifactId>~ L g e P h G
<version>2.2.1.RELEASE</version>
<# 8 . a _ g T W N;type>pom</type>
<scope>import</scope>I n l
</dependency>
</dependencii w  t D } $ ]es>
</dependencyManagement>
<depet L + 9ndenc3 n l _ { Z xies>
&l_ = , e c D E Kt;!-- Sample API --&g4 9 }t;
<dependency&J 6 ! q = 5gt;
<groupId>org.springframework.cloud&F $ |lt;/groupId>y & % f 
<artifactId>spring-cloud-dubbo-sam3 l I U * b Nple-apil i U O e m , _</aI $ g Z f ~  g rtifactId>
<version>${project.versJ . w Q 6 ] iion}</version>
</dependency>
<!-- Spring Boot dependen5 K @ c - C Hcies -->
<dependency>
<groupId>org.springfra( z v O GmeworkP 4 ( P +   F.boot& n ^ D v l k g Flt;/groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframews & A ? K H Uork.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
<w ] l #!-- Dubbo Sprih + } x B l rng Cloud Starter -->
<dependency>
<groupId&gF t f h x 2 ) kt;org.springframework.cloud</groupId>
<artifactId&g+ 6 Z . E 1t;spring-cloud-starter-dubbo</artifactId>
</dependency>
<!-- Sp% S k 9ring Cloud Nacos Service Discovery -->P T 1 q t z f | P
<dependency>
<groupv f N W = b ` J 3Id>org.spring& 6 * @  e Vframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifac6 X l w wtId8 5 % ~>
</dependency>
</di ] Z z }ependenc

与应用 spring-cloud-dubbo-server-sample 不同的是,当前应用依赖 spring-boot-starter-web,表明它属于 WP P C Qeb Seri % P cvlet 应用。

注:以上完整的 Maven 依赖配置,请参考 spring-cloud-dubbo-client-sample pom.xml 文件。

2)配置 Dubbo 服务消费方

Dubbo 服务消费方配置与服务提供方类似,当前应用 spring-cloud-dubbo-client-sample 属于纯` = 6服务U o 5 |消费方,因此,所需的外部化配置更精简:


dubbo:
cloud:
subscribed-services: spring-cloud-alibab% N a 4a-dubbo-se` s ; A h z Frver
spring:
applicationn v I t ` $ c k %:
# Dubbo 应用l Z N名称
name: spring-cloud-alibaba-dubbo-client
cloud:
nacoY ( Us:
# Nm i A 5 acos 服务发现与注册配置6 E K & R
discoveryZ V +:
server-addr: 127c 8 & T I r 7 L o.0.0.1:8848

对比应用 sprj X / I 1 ? g 6ing-cloud-dubbo-server-sample,除应用名称 spring.application.name 存在差异外,spring-cloud-dubbo-client-sample 新增了属性 dubbo.cloud.subscribed-s: , V ; J E z Pervices 的设置,并且该值为服务提供方应用 "spring-cloud-dubbo-sf d $ S * 2erver-sample"。

dubbo.cloud.subscribed-services: 用于服务消费方订阅服务提供方的应用名称的列表,若需订阅多应用,使用 "," 分割。不推荐使用默认值为 "*",它将订阅S d B所有应用。

当应用使用属性 dubbo.cloud.subscribed-services 默认值时,日志中将会输出一行警告:

Current8 u G application will subscribe all services(size:x) in regisc 7 _ =try, aF U 8 J p y j , L lot of memory and^ { J r 0 k ! + CPU cycles may be used,

thusL D g D ] it's strongly re% * E h A K 9 ~commend you using the externalized property 'dubbo.cloud.subscribed-sern { - | O cvices' t4 a w I B Y N @o specify the services

由于当前应用属于 Web 应用,它会默认地0 b / h q 7 m p H使用 8; M ~080 作为 Web 服务端口,如果S p Z d j o _需要自定义,可通过属性 server.ports F G 1 M 1 .整。

:以上完整的E K K ; / YAML 配置文件,; g A l ^请参考 sprinv s a M 9 I Xg-cloud-dr X N d X . = | tubbo-client-sample``bootstrap.yaml 文件。

3)引导 Dubbo Sp] u f x M zring Cloud 服务消费方应用

为了减少实现步骤,以下引导类j } J J U z将 Dubbo 服务消费以及引导h G u o Q X功能合二为一:


@EnableDiscoveryClient
@EnableAutoConfiguration
@RestControlle2 , r
public class DubboSpringCloudClientBootstrap {
@Referenc_ X $e
private EchoService echoService;
@GetMapping("/echo")
public String echo(String message) {
return echoService.echo(message);
}
public static void main(String[] args) {
SpringApplication.run(DubbV G V 1 + ? N boSpringCloudClientBootstrapl d E 2 a 1 ~ g.clw 1 U q 0 Wass);
}

不仅如此,DubboSpringCloudClientBootstrap 也作为 REST Endpoint,通过暴露 /echo Web 服务,消费? N Z 6 + # E Dubbo EchoService 服务。因此, 可通过 curl 命令执行 HTTP GET 方法:

$ curl httpo Z X Q $://127.0.0.1:8080/echo?message=%E5+ i M E & S ` [%B0%8F%E9%A9%AC%E5%93%A5%EF%BC%88mercyblitz%EF%BC%89

HTTP 响应为:

[echo] Hello, 小马哥(merci S - X Oyblitz)

以上结果说明应用 spring-cloud-dubbo-client-sample 通过消费 Dubbo 服务,返回服务提供方 spring-cloud-dubbo-server-sample 运算后的内容。

高阶示例

如果您需要进一步了解 Dubbo Spring Cloud 使用细节,可参考 参考官方 Samples。

其子模块说明如下:

  • spring-cloud-dubbo-sample-api:API 模块,存放 Dubbo 服务接口和模型定义;

  • sU : *pring-cloud-dubbo-provider-web-sample:Dubbo Spring Cloud 服务提供方示例(Web 应用);

  • spring-cloud-dubbo-provider-sample:Dubbo Spring Cloud 服务提供方M g - 6 d , R / (示例(非 Web 应用);

  • spring-cloud-d) ( o Gubbo-6 } ) d 3 @ A 7 uconsumey & n f 9 w = ] Ir-sample:Dubbo Spring Cloud 服务消费方示例;

  • spring-cloud-dubbo-servlet-gateway-sample:Dubbo Spring Cloud Servlet 网关简易实现示例。

问题反馈

如果您在使用 Dubbo Spring ClouK T F d ) + X .d 的过程中遇到任何问题,请在此反馈内容。

反馈链接:https://github.com/alibaba/spring-cloud-alibaba/issues

进阶阅读

关于更多的 Dubbo Spring Cloud 特$ T X 2性以及设计细节,请关注:

  • Spring Cloud Alibaba wiki X 0 a J wi:https://githubP 5 X 2 l.com/alibaba/spring-cloud-alibaba/wiki
  • Dubbo 的博客:http://duZ L ^ } s ibbo.apache.org/zh-cn/blog/index.htmlT b x g j 3 y

系列文章:

  • Dubbo 云原生之路:ASF 毕业一周年、3.0 可期
  • Dubbo 迈出云原生重要一步 - 应用级服务o K D ! _ & f发现解析

作者简介

n u 5马哥(mercyblitz),Java 劝退师,ApX 2 7 b c [ D S lache Dubbo PMC、Spring Cloud Alibaba 项目架构师。目前主要负责阿里集团中间件开源项目、微服务技术实施、架构衍进、基础设施构建等。

“阿里巴巴云原生关注微服务、Serverless、容器、SQ . E P : ( Q p =ervice Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的公众号。”