连接个数:单连接
连接方式:长连接
传输协议:TCP
传输方式:NIO异步传输
序列化:Hessian二进制序列化
适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。
适用场景:常规远程服务方法调用
Rmi协议
可与原生RMI互操作,基于TCP协议
偶尔会连接失败,需重建Stub
Hessian协议
可与原生Hessian互操作,基于HTTP协议
需hessian.jar支持,http短连接的开销大
Hessian协议用于集成Hessian的服务,Hessian底层采用Http通讯,采用Servlet暴露服务,Dubbo缺省内嵌Jetty作为服务器实现
可以和原生Hessian服务互操作
提供者用Dubbo的Hessian协议暴露服务,消费者直接用标准Hessian接口调用
或者提供方用标准Hessian暴露服务,消费方用Dubbo的Hessian协议调用
基于Hessian的远程调用协议
总结
连接个数:多连接
连接方式:短连接
传输协议:HTTP
传输方式:同步传输
序列化:Hessian二进制序列化
适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件
适用场景:页面传输,文件传输,或与原生hessian服务互操作
约束
参数及返回值需实现Serializable接口
参数及返回值不能自定义实现List, Map, Number, Date, Calendar等接口,只能用JDK自带的实现,因为hessian会做特殊处理,自定义实现类中的属性值都会丢失
exchange( 信息交换层)
封装请求响应模式,同步转异步
以Request, Response为中心,扩展接口为Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer
transport( 网络传输层)
抽象mina和netty为统一接口
以Message为中心,扩展接口为Channel, Transporter, Client, Server, Codec
选择
Netty
性能较好(推荐使用)
一次请求派发两种事件,需屏蔽无用事件
Mina
老牌NIO框架,稳定
待发送消息队列派发不及时,大压力下,会出现FullGC
Grizzly
Sun的NIO框架,应用于GlassFish服务器中
线程池不可扩展,Filter不能拦截下一Filter
serialize( 数据序列化层)
可复用的一些工具
扩展接口为Serialization, ObjectInput, ObjectOutput, ThreadPool
选择
Hessian
性能较好,多语言支持(推荐使用)
Hessian的各版本兼容性不好,可能和应用使用的Hessian冲突,Dubbo内嵌了hessian3.2.1的源码
Dubbo
通过不传送POJO的类元信息,在大量POJO传输时,性能较好
当参数对象增加字段时,需外部文件声明
Json
纯文本,可跨语言解析,缺省采用FastJson解析
性能较差
Jav
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
a
Java原生支持
性能较差
关系说明
在RPC中,Pr