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
2
3
4
5
6
7
8
dubbo:
protocols:
tri:
name: tri
port: 50051
dubbo:
name: dubbo
port: 20880
  • 同一服务同时暴露多个协议
  • 注册中心注册多条地址URL
  • 消费端可按需选择协议调用

单端口多协议(平滑迁移)

1
2
3
4
dubbo:
protocol:
name: dubbo
ext-protocol: tri
  • 老用户零成本增加Triple协议支持
  • 为协议迁移提供平滑过渡方案