协议概述

协议概述

Dubbo 作为一款 RPC 框架内置了高效的 RPC 通信协议,帮助解决服务间的编码与通信问题,目前支持的协议包括:

  • triple,基于 HTTP/1、HTTP/2 的高性能通信协议,100% 兼容 gRPC,支持 Unary、Streming 等通信模式;支持发布 REST 风格的 HTTP 服务。
  • dubbo,基于 TCP 的高性能私有通信协议,缺点是通用性较差,更适合在 Dubbo SDK 间使用;
  • 任意协议扩展,通过扩展 protocol 可以之前任意 RPC 协议,官方生态库提供 JsonRPC、thrift 等支持。

协议选型

开发者该如何确定使用哪一种协议那? 以下是我们从使用场景、性能、编程易用性、多语言互通等方面对多个主流协议的对比分析:

协议性能网关友好流式通信多语言支持编程API说明
triple支持,客户端流、服务端流、双向流支持(Java、Go、Node.js、JavaScript、Rust)Java Interface、Protobuf(IDL)在多语言兼容、性能、网关、Streaming、gRPC 等方面最均衡的协议实现,官方推荐。
支持 application/json 格式 payload http 直接访问。
dubbo不支持支持(Java、Go)Java Interface性能最高的私有协议,但前端流量接入、多语言支持等成本较高

以下是 triple、dubbo 两个主要协议的具体开发、配置、运行态信息:

协议名称配置值服务定义方式默认端口传输层协议序列化协议是否默认
tripletri- Java Interface
- Java Interface+SpringWeb注解
- Java Interface+JaxRS注解
- Protobuf(IDL)
50051HTTP/1、HTTP/2Protobuf Binary、Protobuf-json
dubbodubbo- Java Interface20880TCPHessian、Fastjson2、JSON、JDK、Avro、Kryo 等

注意

  • 自 3.3 版本开始,triple 协议支持以 rest 风格发布标准的 http 服务,因此框架中实际已不存在独立的 rest protocol 扩展实现,
  • 考虑到对过往版本的兼容性,当前 Dubbo 各个发行版本均默认使用 dubbo 通信协议。对于新用户而言,我们强烈建议在一开始就明确配置使用 triple 协议,老用户也尽快参考文档 实现协议的平滑迁移

多协议扩展

以下是当前 Dubbo 官方生态库提供的拓展协议实现。如果要扩展更多自定义协议,请参考 SPI 扩展手册使用教程 - 协议扩展

协议配置值说明
HessianhessianHessian 定义的 RPC 通信协议,具体查看 hessian协议
Spring HTTPhttpSpring 定义的基于 HTTP 的私有协议,具体查看 hessian协议
Apache ThriftthriftThrift 协议,具备高性能、支持多语言的特点,具体查看 Thrift协议
JsonRPCjsonrpc具体查看 JsonRPC
RMIrmi具体查看 RMI协议
WebServicewebservice具体查看 WebService协议

最后修改 September 13, 2024: Refactor website structure (#2860) (1a4b998f54b)