Dubbo应用开发之Dubbo中协议的简介
简介
什么是协议?
Client[Consumer]与Server[Provider]在传输数据时双⽅的约定。
协议与序列化的关系
序列化是协议数据的传输⼀种格式。⽬的是为了提⾼协议在⽹络传输的效率。
Dubbo 3.x 官方支持 6 种协议,核心差异如下表:
| 协议 | 报文 | 序列化 | 连接模型 | 特点 | 适用场景 |
|---|---|---|---|---|---|
| dubbo(默认) | 自定义二进制 | Hessian2 / Fastjson2 / Protobuf | 单 TCP + 长连接 + NIO多路复用 | 头部 16B,双工异步;支持泛化、回调、事件 | 常规高并发服务 |
| triple | HTTP/2 帧 | Protobuf(默认) | 单 TCP + HTTP/2 Stream | 100% 兼容 gRPC;支持流式、头部压缩、浏览器 | 云原生、跨语言、网关 |
| rest | JAX-RS | JSON | HTTP短连接 | 直接浏览器/前端调用 | 对外开放 API |
| grpc | HTTP/2 帧 | Protobuf | 同 triple | 与原生 gRPC 互通 | Go/Node 混合集群 |
| rmi | Java RMI | Java 原生 | 单 TCP | 只能 Java 互调,防火墙穿透差 | 遗留系统 |
| webservice | SOAP | XML | HTTP短连接 | 重量级,WS-* 标准 | 对接政企老系统 |
1. dubbo 协议帧格式(2.7/3.x 通用)
- 双工异步:同一个 TCP 链接上客户端与服务端可同时发请求/响应/心跳。
- 心跳:标志位
0x20,载荷长度 0,维持长连接。 - 泛化调用:消费者无接口类也能调,网关必备。
2. triple 协议(Dubbo 3 首推)
- 基于 HTTP/2,天然 多路复用、头部压缩、流式;
- IDL 默认 Protobuf,也可
application/json; - 与 gRPC 完全互通,可使用 Envoy、Istio 做负载与治理;
- 支持 Unary / Server-Stream / Bi-Stream;
- 单端口双协议:同一 20880 端口同时跑 dubbo 与 triple,平滑迁移。
之前在配置文件中指定的协议都是dubbo的私有协议
不同协议的通信效率对⽐
可以发现REST代表的http协议和Dubbo协议的序列化技术无论是响应时间还是TPS都是天壤之别,所以一般情况我们还是尽量使用Dubbo协议