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替代 SpringService配置 Dubbo应用名、协议dubbo/triple/rest、端口、注册中心地址开启 Dubbo启动类加EnableDubbo(scanBasePackages 服务包路径)消费端改造依赖common模块用DubboReference注入服务替代RestTemplate3. 兼容 HTTP 调用关键配置多协议同时开启dubborest协议实现类添加 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 ↔ Go1. 核心原理用Protobuf统一定义服务接口跨语言 IDL用 Protobuf 编译器编译为对应语言代码Java/Go基于Triple 协议实现跨语言通信2. Java 服务端步骤编写.proto文件定义服务与消息配置protobuf-maven-plugin编译生成 Java 代码实现 Protobuf 生成的接口用DubboService暴露协议改为tri连接 Zookeeper3. Go 消费端步骤复制同一份.proto文件安装protoc、protoc-gen-go-triple编译生成 Go 代码配置dubbogo.yml编写调用代码环境变量指定配置文件路径启动调用四、Dubbo3.0 与 gRPC 互通核心Triple 协议完全兼容 gRPC 协议格式Java Dubbo 调用 gRPCDubboReference(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 调用 DubboDubbo 服务开启rest协议Spring Cloud 用FeignClient直连 Dubbo 的 rest 端口调用限制暂不支持注册中心自动发现源码存在 bug六、改造完整总结加依赖Dubbo starter、协议、注册中心配配置应用名、协议、注册中心地址抽接口公共模块 服务接口标注解DubboService/DubboReference/EnableDubbo选协议dubbo/triple/rest跨语言优先 triple通注册Zookeeper应用级注册