Dubbo3.0新特性介绍与使用
一、SpringBoot 应用改造为 Dubbo3.0 应用(实战步骤)
1. 原始应用架构
- 分为 provider(服务提供者)和 consumer(服务消费者两个 SpringBoot 项目
- 通信方式:consumer 通过
RestTemplate 发起 HTTP 调用 provider 的 Controller
- 公共实体
User 分散在两个项目中,无统一接口层
2. 改造核心 6 步
- 添加依赖
- 核心:
dubbo-spring-boot-starter
- 协议:
dubbo-rpc-dubbo
- 注册中心:
dubbo-registry-zookeeper
- 可替换
spring-boot-starter-web 为 spring-boot-starter
- 抽取公共模块
- 新建
common 模块,存放 User 实体、服务接口
- 定义服务接口与实现
- 抽象
UserService 接口,实现类改为 UserServiceImpl
- 用
@DubboService 替代 Spring @Service
- 配置 Dubbo
- 应用名、协议(dubbo/triple/rest)、端口、注册中心地址
- 开启 Dubbo
- 启动类加
@EnableDubbo(scanBasePackages = "服务包路径")
- 消费端改造
- 依赖
common 模块
- 用
@DubboReference 注入服务,替代 RestTemplate
3. 兼容 HTTP 调用(关键)
- 配置多协议 :同时开启
dubbo+rest 协议
- 实现类添加 JAX-RS 注解:
@Path/@GET/@Produces
- 依赖:
dubbo-rpc-rest
二、Dubbo3.0 核心新特性
1. 注册模型升级:应用级注册
- Dubbo2.7:接口级注册,一个接口对应一条注册信息,资源占用高
- Dubbo3.0:应用级注册,一个应用对应一条注册信息,与 Spring Cloud 对齐
- 优势:提升效率、节省资源、为跨框架互通奠定基础
2. 新一代 RPC 协议:Triple 协议(默认协议)
- 底层基于HTTP2,解决 HTTP1.x 性能问题
- 核心优势:
- 兼容 gRPC,双向互通
- 支持流式调用(单向/服务端流/客户端流/双向流)
- 跨语言、跨异构系统更通用
- 单连接多路复用,吞吐量更高
3. Triple 协议流式调用类型
- UNARY:普通单次调用(默认)
- SERVER_STREAM:服务端流式返回多条数据
- CLIENT_STREAM:客户端流式发送多条数据
- BI_STREAM:双向流式通信
三、Dubbo3.0 跨语言调用(Java ↔ Go)
1. 核心原理
- 用 Protobuf 统一定义服务接口(跨语言 IDL)
- 用 Protobuf 编译器编译为对应语言代码(Java/Go)
- 基于 Triple 协议实现跨语言通信
2. Java 服务端步骤
- 编写
.proto 文件定义服务与消息
- 配置
protobuf-maven-plugin 编译生成 Java 代码
- 实现 Protobuf 生成的接口,用
@DubboService 暴露
- 协议改为
tri,连接 Zookeeper
3. Go 消费端步骤
- 复制同一份
.proto 文件
- 安装
protoc、protoc-gen-go-triple
- 编译生成 Go 代码
- 配置
dubbogo.yml,编写调用代码
- 环境变量指定配置文件路径,启动调用
四、Dubbo3.0 与 gRPC 互通
- 核心:Triple 协议完全兼容 gRPC 协议格式
- Java Dubbo 调用 gRPC:
@DubboReference(protocol = "tri", url = "gRPC地址", proxy = CommonConstants.NATIVE_STUB)
- gRPC 调用 Java Dubbo:
- 直接连接 Triple 协议端口(20880/20881)即可调用
五、Dubbo3.0 与 Spring Cloud 互通
1. Dubbo 调用 Spring Cloud
- 用
rest 协议,通过 @DubboReference 指定应用名/直连 URL
- 接口添加 JAX-RS 注解映射 Controller 路径
2. Spring Cloud 调用 Dubbo
- Dubbo 服务开启
rest 协议
- Spring Cloud 用
@FeignClient 直连 Dubbo 的 rest 端口调用
- 限制:暂不支持注册中心自动发现(源码存在 bug)
六、改造完整总结
- 加依赖(Dubbo starter、协议、注册中心)
- 配配置(应用名、协议、注册中心地址)
- 抽接口(公共模块 + 服务接口)
- 标注解(
@DubboService/@DubboReference/@EnableDubbo)
- 选协议(dubbo/triple/rest,跨语言优先 triple)
- 通注册(Zookeeper,应用级注册)