①、Dubbojava
Dubbo 缺省协议采用单一长链接和 NIO 异步通信,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的状况。json
反之,Dubbo 缺省协议不适合传送大数据量的服务,好比传文件,传视频等,除非请求量很低。浏览器
- Transporter: mina, netty, grizzy
- Serialization: dubbo, hessian2, java, json
- Dispatcher: all, direct, message, execution, connection
- ThreadPool: fixed, cached
特性缓存
缺省协议,使用基于 mina 1.1.7 和 hessian 3.2.1 的 tbremoting 交互。安全
- 链接个数:单链接
- 链接方式:长链接
- 传输协议:TCP
- 传输方式:NIO 异步传输
- 序列化:Hessian 二进制序列化
- 适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者没法压满提供者,尽可能不要用 dubbo 协议传输大文件或超大字符串。
- 适用场景:常规远程服务方法调用
②、RMI服务器
RMI 协议采用 JDK 标准的 java.rmi.* 实现,采用阻塞式短链接和 JDK 标准序列化方式。注意:若是正在使用 RMI 提供服务给外部访问,同时应用里依赖了老的 common-collections 包的状况下,存在反序列化安全风险。并发
特性frontend
- 链接个数:多链接
- 链接方式:短链接
- 传输协议:TCP
- 传输方式:同步传输
- 序列化:Java 标准二进制序列化
- 适用范围:传入传出参数数据包大小混合,消费者与提供者个数差很少,可传文件。
- 适用场景:常规远程服务方法调用,与原生RMI服务互操做
③、Hessian 异步
Hessian 协议用于集成 Hessian 的服务,Hessian 底层采用 Http 通信,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 做为服务器实现。memcached
Dubbo 的 Hessian 协议能够和原生 Hessian 服务互操做,即:
- 提供者用 Dubbo 的 Hessian 协议暴露服务,消费者直接用标准 Hessian 接口调用。
- 或者提供方用标准 Hessian 暴露服务,消费方用 Dubbo 的 Hessian 协议调用。
特性
- 链接个数:多链接
- 链接方式:短链接
- 传输协议:HTTP
- 传输方式:同步传输
- 序列化:Hessian二进制序列化
- 适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件。
- 适用场景:页面传输,文件传输,或与原生hessian服务互操做
④、Http
基于 HTTP 表单的远程调用协议,采用 Spring 的 HttpInvoker 实现
特性
- 链接个数:多链接
- 链接方式:短链接
- 传输协议:HTTP
- 传输方式:同步传输
- 序列化:表单序列化
- 适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件。
- 适用场景:需同时给应用程序和浏览器 JS 使用的服务。
⑤、WebService
基于 WebService 的远程调用协议,基于 Apache CXF 的 frontend-simple 和 transports-http 实现。
能够和原生 WebService 服务互操做,即:
- 提供者用 Dubbo 的 WebService 协议暴露服务,消费者直接用标准 WebService 接口调用,
- 或者提供方用标准 WebService 暴露服务,消费方用 Dubbo 的 WebService 协议调用。
特性
- 链接个数:多链接
- 链接方式:短链接
- 传输协议:HTTP
- 传输方式:同步传输
- 序列化:SOAP 文本序列化
- 适用场景:系统集成,跨语言调用
⑥、Thrift
当前 dubbo 支持的 thrift 协议是对 thrift 原生协议 的扩展,在原生协议的基础上添加了一些额外的头信息,好比 service name,magic number 等。
使用 dubbo thrift 协议一样须要使用 thrift 的 idl compiler 编译生成相应的 java 代码,后续版本中会在这方面作一些加强。
⑦、缓存
基于 memcached 实现的 RPC 协议 。
基于 Redis 实现的 RPC 协议 。