Dubbo 支持的 RPC 通信协议
Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。
在云原生时代,Dubbo 相继衍生出了 Dubbo3、Proxyless Mesh 等架构与解决方案,在易用性、超大规模微服务实践、云原生基础设施适配、安全性等几大方向上进行了全面升级。
📋 Dubbo RPC协议概览
Dubbo目前支持三种主要RPC通信协议:
- Triple协议:基于HTTP/1、HTTP/2的高性能协议,100%兼容gRPC
- Dubbo协议:基于TCP的高性能私有协议
- REST协议:自3.3版本起,REST实际是Triple协议的一种发布形式
📊 协议对比分析
| 协议 | 性能 | 网关友好 | 流式通信 | 多语言支持 | 推荐场景 |
|---|---|---|---|---|---|
| Triple | 高 | 高 | ✅ 客户端/服务端/双向流 | Java/Go/Node.js/JS/Rust | 官方推荐,多语言、性能、网关等最均衡 |
| Dubbo | 最高 | 低 | ❌ 不支持 | Java/Go | 纯Java生态,追求极致性能 |
| REST | 低 | 高 | ❌ 不支持 | 广泛支持 | 前端接入,快速集成 |
⚙️ 核心特性
Triple协议(推荐)
- 默认端口:50051
- 服务定义:支持Java Interface + Protobuf(IDL)双模式
- HTTP直接访问:支持cURL等标准HTTP工具调用
- 多语言互通:原生兼容gRPC生态
Dubbo协议
- 默认端口:20880
- 序列化:自动协商(Fastjson2/Hessian2)
- 高性能:私有协议,性能最优
- 网关接入:需通过网关转换HTTP→Dubbo
REST协议
- 本质:Triple协议的REST风格发布形式
- 注解支持:Spring MVC + JAX-RS
- 配置:
name: tri(老版本name: rest自动转换)
🔄 多协议发布策略
多端口多协议
1 | dubbo: |
- 同一服务同时暴露多个协议
- 注册中心注册多条地址URL
- 消费端可按需选择协议调用
单端口多协议(平滑迁移)
1 | dubbo: |
- 老用户零成本增加Triple协议支持
- 为协议迁移提供平滑过渡方案