Dubbo3.0新特性介绍与使用

一、SpringBoot 应用改造为 Dubbo3.0 应用(实战步骤)

1. 原始应用架构

  • 分为 provider(服务提供者) consumer(服务消费者两个 SpringBoot 项目
  • 通信方式:consumer 通过 RestTemplate 发起 HTTP 调用 provider 的 Controller
  • 公共实体 User 分散在两个项目中,无统一接口层

2. 改造核心 6 步

  1. 添加依赖
    • 核心:dubbo-spring-boot-starter
    • 协议:dubbo-rpc-dubbo
    • 注册中心:dubbo-registry-zookeeper
    • 可替换 spring-boot-starter-webspring-boot-starter
  2. 抽取公共模块
    • 新建 common 模块,存放 User 实体、服务接口
  3. 定义服务接口与实现
    • 抽象 UserService 接口,实现类改为 UserServiceImpl
    • @DubboService 替代 Spring @Service
  4. 配置 Dubbo
    • 应用名、协议(dubbo/triple/rest)、端口、注册中心地址
  5. 开启 Dubbo
    • 启动类加 @EnableDubbo(scanBasePackages = "服务包路径")
  6. 消费端改造​
    • 依赖 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 性能问题
  • 核心优势:
    1. 兼容 gRPC,双向互通
    2. 支持流式调用(单向/服务端流/客户端流/双向流)
    3. 跨语言、跨异构系统更通用
    4. 单连接多路复用,吞吐量更高

3. Triple 协议流式调用类型

  • UNARY:普通单次调用(默认)
  • SERVER_STREAM:服务端流式返回多条数据
  • CLIENT_STREAM:客户端流式发送多条数据
  • BI_STREAM:双向流式通信

三、Dubbo3.0 跨语言调用(Java ↔ Go)

1. 核心原理

  • Protobuf 统一定义服务接口(跨语言 IDL)
  • 用 Protobuf 编译器编译为对应语言代码(Java/Go)
  • 基于 Triple 协议实现跨语言通信

2. Java 服务端步骤

  1. 编写 .proto 文件定义服务与消息
  2. 配置 protobuf-maven-plugin 编译生成 Java 代码
  3. 实现 Protobuf 生成的接口,用 @DubboService 暴露
  4. 协议改为 tri,连接 Zookeeper

3. Go 消费端步骤

  1. 复制同一份 .proto 文件
  2. 安装 protocprotoc-gen-go-triple
  3. 编译生成 Go 代码
  4. 配置 dubbogo.yml,编写调用代码
  5. 环境变量指定配置文件路径,启动调用

四、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)

六、改造完整总结

  1. 加依赖(Dubbo starter、协议、注册中心)
  2. 配配置(应用名、协议、注册中心地址)
  3. 抽接口(公共模块 + 服务接口)
  4. 标注解(@DubboService/@DubboReference/@EnableDubbo
  5. 选协议(dubbo/triple/rest,跨语言优先 triple)
  6. 通注册(Zookeeper,应用级注册)
相关推荐
咸鱼2.05 天前
【java入门到放弃】Dubbo
java·开发语言·dubbo
全栈前端老曹7 天前
【前端地图】多地图平台适配方案——高德、百度、腾讯、Google Maps SDK 差异对比、封装统一地图接口
前端·javascript·百度·dubbo·wgs84·gcj-02·bd09
滴图客户服务经理8 天前
滴图开放平台 API 全评测:注册、功能、体验与选型建议
dubbo
百度智能云技术站9 天前
百度百舸 x 昆仑芯,Day0 适配小米 MiMo-V2.5-Pro 模型
dubbo
阿冰冰呀10 天前
互联网大厂Java求职面试实录:谢飞机的“水货”之路
java·mybatis·dubbo·springboot·线程池·多线程·hashmap
User_芊芊君子11 天前
破解交互系统的“不可能三角”:低延迟、高并发与低成本的端到端实现
人工智能·dubbo·生活
隔窗听雨眠13 天前
百度搜索算法逆向思考
百度·dubbo
星辰_mya14 天前
RPC 原理:Dubbo为了偷懒而存在的中间商
后端·网络协议·rpc·架构·dubbo
sghuter14 天前
数字资源分发架构解密
后端·架构·dubbo
重学一遍15 天前
模拟面试-微服务-Dubbo源码解析
dubbo