Dubbo所支持8种通信协议供我们选择使用。在实际项目中,不同的应用一般对应不同的服务,选择合适的协议便是一件非常重要的事情。
那么,我们可以根据自己的应用特性来进行选择相应的协议,例如:
- 通信数据包小、并发高的服务可以选择Dubbo协议(大多应用适合用Dubbo协议);
- 传输数据大并且提供者比消费者数量多的服务,可以选择Hessian协议;
- 对于外部于内部进行通信的场景,若想要穿透防火墙的限制,则可以选择基于Http或者Hessian协议。
dubbo://
Dubbo协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。
Dubbo协议不适合传送大数据量的场景,比如传文件,传视频等,除非请求量很低;
Dubbo官方推荐使用Dubbo协议,Dubbo协议也是Dubbo默认的协议;
连接个数:单连接
连接方式:长连接
传输协议:TCP
传输方式:NIO 异步传输
序列化:Hessian 二进制序列化
适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,尽量不要用 dubbo 协议传输大文件或超大字符串。
⭐适用场景:常规远程服务方法调用。
配置位置:
<dubbo:protocol name="dubbo" />
<dubbo:provider protocol="dubbo" />
<dubbo:service protocol="dubbo" />
<dubbo:reference protocol="dubbo" />
hessian://
Hessian协议用于集成Hessian的服务,Hessian底层采用Http通讯,采用Servlet暴露服务,Dubbo缺省内嵌Jetty作为服务器实现。
连接个数:多连接
连接方式:短连接
传输协议:HTTP
传输方式:同步传输
序列化:Hessian二进制序列化
适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件;
⭐适用场景:页面传输,文件传输,或与原生hessian服务互操作。
Hessian是Caucho开源的一个RPC框架:http://hessian.caucho.com,其通讯效率高于WebService和Java自带的序列化。
http://
采用Spring的HttpInvoker实现,基于http表单的远程调用协议。
连接个数:多连接
连接方式:短连接
传输协议:HTTP
传输方式:同步传输
序列化:表单序列化
⭐适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件。
⭐适用场景:需同时给应用程序和浏览器JS使用的服务。
rmi://
RMI协议采用JDK标准的java.rmi.*实现,采用阻塞式短连接和JDK标准序列化方式,是Java标准的远程调用协议。
连接个数:多连接
连接方式:短连接
传输协议:TCP
传输方式:同步传输
序列化:Java标准二进制序列化
适用范围:传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件。
⭐适用场景:常规远程服务方法调用,与原生RMI服务互操作。
webservice://
基于CXF的frontend-simple和transports-http实现,CXF是Apache开源的一个RPC框架:http://cxf.apache.org,由Xfire和Celtix合并而来。
提供者用Dubbo的WebService协议暴露服务,消费者直接用标准WebService接口调用,或者提供方用标准WebService暴露服务,消费方用Dubbo的WebService协议调用。
基于WebService的远程调用协议。
连接个数:多连接
连接方式:短连接
传输协议:HTTP
传输方式:同步传输
序列化:SOAP文本序列化
⭐适用场景:系统集成,跨语言调用。
thrift://
Thrift是Facebook捐给Apache的一个RPC框架;
参见:http://thrift.apache.org
当前 dubbo 支持的 thrift 协议是对 thrift 原生协议的扩展,在原生协议的基础上添加了一些额外的头信息,比如service name,magic number等。
使用dubbo thrift协议同样需要使用thrift的idl compiler编译生成相应的java代码,后续版本中会在这方面做一些增强。
memcached://
Memcached是一个高效的KV缓存服务器;
参见:http://memcached.org/
redis://
Redis是一个高效的KV存储服务器;
参见:http://redis.io
作者: Zealon
崇尚简单,一切简单自然的事物都是美好的。