Dubbo 作为一款 RPC 框架内置了高效的 RPC 通信协议,帮助解决服务间的编码与通信问题,目前支持的协议包括:
开发者该如何确定使用哪一种协议那? 以下是我们从使用场景、性能、编程易用性、多语言互通等方面对多个主流协议的对比分析:
协议 | 性能 | 网关友好 | 流式通信 | 多语言支持 | 编程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 两个主要协议的具体开发、配置、运行态信息:
协议名称 | 配置值 | 服务定义方式 | 默认端口 | 传输层协议 | 序列化协议 | 是否默认 |
---|---|---|---|---|---|---|
triple | tri | - Java Interface - Java Interface+SpringWeb注解 - Java Interface+JaxRS注解 - Protobuf(IDL) | 50051 | HTTP/1、HTTP/2 | Protobuf Binary、Protobuf-json | 否 |
dubbo | dubbo | - Java Interface | 20880 | TCP | Hessian、Fastjson2、JSON、JDK、Avro、Kryo 等 | 是 |
dubbo
通信协议。对于新用户而言,我们强烈建议在一开始就明确配置使用 triple
协议,老用户也尽快参考文档 实现协议的平滑迁移。以下是当前 Dubbo 官方生态库提供的拓展协议实现。如果要扩展更多自定义协议,请参考 SPI 扩展手册 或 使用教程 - 协议扩展。
协议 | 配置值 | 说明 |
---|---|---|
Hessian | hessian | Hessian 定义的 RPC 通信协议,具体查看 hessian协议 |
Spring HTTP | http | Spring 定义的基于 HTTP 的私有协议,具体查看 hessian协议 |
Apache Thrift | thrift | Thrift 协议,具备高性能、支持多语言的特点,具体查看 Thrift协议 |
JsonRPC | jsonrpc | 具体查看 JsonRPC |
RMI | rmi | 具体查看 RMI协议 |
WebService | webservice | 具体查看 WebService协议 |