dubbo://
Dubbo协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。
Dubbo协议底层默认使用的是netty,性能非常优秀,官方推荐使用此协议
Dubbo协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低
hessian://
Hessian协议用于集成Hessian的服务,Hessian底层采用Http通讯,采用Servlet暴露服务,Dubbo缺省内嵌Jetty作为服务器实现。
Hessian是Caucho开源的一个RPC框架:http://hessian.caucho.com,其通讯效率高于WebService和Java自带的序列化。
需加入hessian包,api 'com.caucho:hessian:4.0.38'
推荐使用
推荐使用
使用servlet派发请求:
协议的端口
协议的上下文路径
使用servlet派发请求:
协议的端口
协议的上下文路径
rmi://
RMI协议采用JDK标准的java.rmi.*实现,采用阻塞式短连接和JDK标准序列化方式
是Java标准的远程调用协议
连接个数:多连接
连接方式:短连接
传输协议:TCP
传输方式:同步传输
序列化:Java标准二进制序列化
适用范围:传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件。
适用场景:常规远程服务方法调用,与原生RMI服务互操作
http://
采用Spring的HttpInvoker实现
基于http表单的远程调用协议
连接个数:多连接
连接方式:短连接
传输协议:HTTP
传输方式:同步传输
序列化:表单序列化
适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件。
适用场景:需同时给应用程序和浏览器JS使用的服务。
参数及返回值需符合Bean规范
默认:
推荐:
协议的端口
协议的上下文路径
webservice://
基于CXF的frontend-simple和transports-http实现,CXF是Apache开源的一个RPC框架:http://cxf.apache.org,由Xfire和Celtix合并而来 。
提供者用Dubbo的WebService协议暴露服务,消费者直接用标准WebService接口调用,或者提供方用标准WebService暴露服务,消费方用Dubbo的WebService协议调用。
基于WebService的远程调用协议。
连接个数:多连接
连接方式:短连接
传输协议:HTTP
传输方式:同步传输
序列化:SOAP文本序列化
适用场景:系统集成,跨语言调用。
参数及返回值需实现Serializable接口
参数尽量使用基本类型和POJO。
默认:
推荐:
协议的端口
协议的上下文路径
WSDL:
http://10.20.153.10:8080/com.foo.HelloWorld?wsdl
thrift://
Thrift是Facebook捐给Apache的一个RPC框架,参见:http://thrift.apache.org
当前 dubbo 支持的 thrift 协议是对 thrift 原生协议的扩展,在原生协议的基础上添加了一些额外的头信息,比如service name,magic number等。使用dubbo thrift协议同样需要使用thrift的idl compiler编译生成相应的java代码,后续版本中会在这方面做一些增强。
org.apache.thrift:libthrift:0.8.0
null值 (不能在协议中传递null值)
memcached://
Memcached是一个高效的KV缓存服务器,参见:http://memcached.org/
方法名建议和memcached的标准方法名相同,即:get(key), set(key, value), delete(key)
redis://
Redis是一个高效的KV存储服务器,参见:http://redis.io
方法名建议和redis的标准方法名相同,即:get(key), set(key, value), delete(key)