0x01 Dubbo3 简介

1
Apache Dubbo 是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。同时 Dubbo 是高度可扩展的,用户几乎可以在任意功能点去定制自己的实现,以改变框架的默认行为来满足自己的业务需求。

Dubbo3 基于 Dubbo2 演进而来,在保持原有核心功能特性的同时, Dubbo3 在易用性、超大规模微服务实践、云原生基础设施适配等几大方向上进行了全面升级。 以下文档都将基于 Dubbo3 展开。

0x02 What is Dubbo?

如开篇所述,Dubbo 提供了构建云原生微服务业务的一站式解决方案,可以使用 Dubbo 快速定义并发布微服务组件,同时基于 Dubbo 开箱即用的丰富特性及超强的扩展能力,构建运维整个微服务体系所需的各项服务治理能力,如 Tracing、Transaction 等,Dubbo 提供的基础能力包括:

  • 服务发现
  • 流式通信
  • 负载均衡
  • 流量治理
  • …..

Dubbo 计划提供丰富的多语言客户端实现,其中 Java、Golang 版本是当前稳定性、活跃度最好的版本,其他多语言客户端[]正在持续建设中。

自开源以来,Dubbo 就被一众大规模互联网、IT公司选型,经过多年企业实践积累了大量经验。Dubbo3 是站在巨人肩膀上的下一代产品,它汲取了上一代的优点并针对已知问题做了大量优化,因此,Dubbo 在解决业务落地与规模化实践方面有着无可比拟的优势:

  • 开箱即用
    • 易用性高,如 Java 版本的面向接口代理特性能实现本地透明调用
    • 功能丰富,基于原生库或轻量扩展即可实现绝大多数的微服务治理能力
  • 超大规模微服务集群实践
    • 高性能的跨进程通信协议
    • 地址发现、流量治理层面,轻松支持百万规模集群实例
  • 企业级微服务治理能力
    • 服务测试
    • 服务Mock

Dubbo3 是在云原生背景下诞生的,使用 Dubbo 构建的微服务遵循云原生思想,能更好的复用底层云原生基础设施、贴合云原生微服务架构。这体现在:

  • 服务支持部署在容器、Kubernetes平台,服务生命周期可实现与平台调度周期对齐;
  • 支持经典 Service Mesh 微服务架构,引入了 Proxyless Mesh 架构,进一步简化 Mesh 的落地与迁移成本,提供更灵活的选择;
  • 作为桥接层,支持与 SpringCloud、gRPC 等异构微服务体系的互调互通

Apache Dubbo官网:https://dubbo.apache.org/

0x02 SpringBoot 集成Dubbo分布式框架

  1. 接口工程: 存放实体bean和业务接口
  2. 服务提供者: 业务接口的实现类并将服务暴露且注册到注册中心,调用数据持久层
    • 添加依赖(dubbo,注册中心,接口工程)
    • 配置服务提供者核心配置文件
  3. 服务消费者: 处理浏览器客户端发送的请求,从注册中心调用服务提供者所提供的服务
    • 添加依赖(dubbo,注册中心,接口工程)
    • 配置服务消费者核心配置文件

首先我们要创建:接口工程项目文件Interface(maven)、提供者项目文件Provider(springboot)、消费者项目文件Consumer(springboot)。

在Provider项目Pom.xml中添加依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!--Dubbo集成SpringBoot框架起步依赖-->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>

<!--注册中心-->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>

<!--接口工程(我们所创建的接口工程项目地址)-->
<dependency>
<groupId>com.bjpowernode.springboot</groupId>
<artifactId>020-springboot-dubbo-interface</artifactId>
<version>1.0.0</version>
</dependency>

Provider项目的核心配置文件 application.properties:

1
2
3
4
5
6
7
8
9
10
11
#设置内嵌Tomcat端口号
server.port=8081
#设置上下文根
server.servlet.context-path=/

#设置dubbo的配置
spring.application.name=021-springboot-dubbo-provider
#当前工程是一个服务提供者
spring.dubbo.server=true
#设置注册中心
spring.dubbo.registry=zookeeper://127.0.0.1:2181

接下来是Consumer消费者项目工程,在Pom.xml中添加依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 <!--Dubbo集成SpringBoot框架起步依赖-->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>

<!--注册中心-->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>

<!--接口工程-->
<dependency>
<groupId>com.bjpowernode.springboot</groupId>
<artifactId>020-springboot-dubbo-interface</artifactId>
<version>1.0.0</version>
</dependency>

Consumer项目的核心配置文件 application.properties:

1
2
3
4
5
6
7
8
#设置内嵌Tomcat端口号
server.port=8080
server.servlet.context-path=/

#设置dubbo配置
spring.application.name=022-springboot-dubbo-consumer
#指定注册中心
spring.dubbo.registry=zookeeper://127.0.0.1:2181