1、dubbo 默认协议:
- 单一 TCP 长连接,Hessian 二进制序列化和 NIO 异步通讯
- 适合于小数据包大并发的服务调用和服务消费者数远大于服务提供者数的情况
- 不适合传送大数据包的服务
2、rmi 协议:
- 采用 JDK 标准的 java.rmi.* 实现,采用阻塞式短连接和 JDK 标准序列化方式
- 如果服务接口继承了 java.rmi.Remote 接口,可以和原生 RMI 互操作
- 因反序列化漏洞,需升级 commons-collections3 到 3.2.2版本或 commons-collections4 到 4.1 版本
- 对传输数据包不限,消费者和传输者个数相当
3、hessian 协议:
- 底层 Http 通讯,Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现
- 可与原生 Hessian 服务互操作
- 通讯效率高于 WebService 和 Java 自带的序列化
- 参数及返回值需实现 Serializable 接口,自定义实现 List、Map、Number、Date、Calendar 等接口
- 适用于传输数据包较大,提供者比消费者个数多,提供者压力较大
4、http 协议:
- 基于 http 表单的远程调用协议,短连接,json 序列化
- 对传输数据包不限,不支持传文件
- 适用于同时给应用程序和浏览器 JS 使用的服务
5、webservice 协议:
- 基于 Apache CXF 的 frontend-simple 和 transports-http 实现,短连接,SOAP文本序列化
- 可与原生 WebService 服务互操作
- 适用于系统集成、跨语言调用
6、thrift 协议:
- 对 thrift 原生协议 [2] 的扩展添加了额外的头信息
- 使用较少,不支持传 null 值
7、基于 Redis实现的 RPC 协议
8、基于 Memcached 实现的 RPC 协议
官方文档:http://dubbo.apache.org/zh-cn/docs/user/references/xml/dubbo-protocol.html