hessian、rmi、dubbo与rpc之间的关系

单的说,RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。
RPC 会隐藏底层的通讯细节(不需要直接处理Socket通讯或Http通讯)
RPC 是一个请求响应模型。客户端发起请求,服务器返回响应(类似于Http的工作方式)
RPC 在使用形式上像调用本地函数(或方法)一样去调用远程的函数(或方法)。

hessian、rmi、dubbo都是rpc的一种实现
rpc基于xdr
rmi是rpc的面向对象版实现
hessian是基于binary-rpc协议
dubbo是 基于Hessian二进制序列化

dubbo和hessiant特性

根据官方说明:Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况

Hessian协议用于集成Hessian的服务,Hessian底层采用Http通讯,采用Servlet暴露服务。适用场景:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件。因此比较高效的做法是带上传下载文件的服务使用hessian协议,去普通的服务使用dubbo协议。

Hessian以InputStream 做参数注意事项

Hessian 以InputStream 做参数的原理:                                                                                                                             首先hessian要求inputstream 参数只能是参数列表中的最后一个,客户端顺序发送各个参数,直到最后一个inputstream对象,读取其内容,并写入输出流。
服务端获取到请求输入流后,按参数顺序进行反序列化,直到遇到类型为InputStream的参数时,创建一个InputStream对象,实现InputStream的接口,其行为是从 输入流读取数据,该对象返回给开发者后就可以自由读取流中剩余的数据了(也就是传参时从inputstream读取出的所有数据)。

对于返回值是InputStream的情况,有两种,一种是返回值就是一个InputStream对象,则服务端从中读取数据并写入输出流,和输入参数为InputStream的情况类似。
另一种是返回一个对象,对象中包含InputStream类型的字段,这时一定要注意,InputStream字段一定是所有非基本类型字段里的最后一个,原因同入参的情况一样。  另外就是inputstream类型字段不能超过1个。

hessian、rmi、dubbo与rpc关系相关推荐

  1. Dubbo实现RPC调用使用入门

    使用Dubbo进行远程调用实现服务交互,它支持多种协议,如Hessian.HTTP.RMI.Memcached.Redis.Thrift等等.由于Dubbo将这些协议的实现进行了封装了,无论是服务端( ...

  2. 【Rpc】基于开源Dubbo分布式RPC服务框架的部署整合

    一.前言 Dubbo 作为SOA服务化治理方案的核心框架,用于提高业务逻辑的复用.整合.集中管理,具有极高的可靠性(HA)和伸缩性,被应用于阿里巴巴各成员站点,同时在包括JD.当当在内的众多互联网项目 ...

  3. Dubbo——初识RPC、Dubbo框架、使用直连方式实现Dubbo

    文章目录: 1.RPC & 软件架构 1.1 单一应用架构 1.2 分布式微服务架构 1.3 RPC 2.Dubbo概述 2.1基本架构 2.2 dubbo支持的协议 3.直连方式实现dubb ...

  4. Dubbo面试 - 如何自己设计一个类似 Dubbo 的 RPC 框架?

    Dubbo面试 - 如何自己设计一个类似 Dubbo 的 RPC 框架? 面试题 如何自己设计一个类似 Dubbo 的 RPC 框架? 面试官心理分析 说实话,就这问题,其实就跟问你如何自己设计一个 ...

  5. Spring Cloud与微服务学习总结(2)——Spring Cloud相较于Dubbo等RPC服务框架的优势

    摘要: 目前,Spring Cloud在国内的知名度并不高,在前阵子的求职过程中,与一些互联网公司的架构师.技术VP或者CTO在交流时,有些甚至还不知道该项目的存在.可能这也与国内阿里巴巴开源服务治理 ...

  6. RabbitMQ (五)实现类似Dubbo的RPC调用

    springboot对rabbitMQ的接口做了封装,要实现 request/reponse 模式的调用,只需要调用 rabbitTemplate.convertSendAndReceive 方法即可 ...

  7. SpringCloud集成Dubbo实现RPC调用

    SpringCloud轻松集成Dubbo实现RPC调用 很久之前在做微服务架构选型的时候就听说阿里的微服务RPC框架dubbo,当时与Spring Cloud以http协议调用的架构做对比.发现dub ...

  8. 关于dubbo的rpc基于传输层一说

    行文之前,我也有诸多不确定,要是有不对之处,万望斧正 我们一般比较这个会拿springcloud的restful传输和dubbo来进行对比,网上大多数的文章都是,springcloud的restful ...

  9. 高并发架构系列:如何从0到1设计一个类Dubbo的RPC框架

    优知学院 2019-01-22 18:43:51 之前持续分享的几十期阿里Java面试题中,几乎每次必问Dubbo,比如:"如何从0到1设计一个Dubbo的RPC框架",其实主要考 ...

最新文章

  1. 文巾解题 596. 超过5名学生的课
  2. ffmpeg 命令_Qt音视频开发11-ffmpeg常用命令
  3. 【渝粤题库】陕西师范大学202871 婚姻家庭法作业
  4. 解决:阿里云ECS服务器 远程连接不上、极慢 (主机监控的实现)
  5. Linux系统编程18:超详解进程程序替换exec函数的一些用法
  6. 德州python培训_人工智能在多人桌德州扑克比赛中战胜世界顶尖选手
  7. RAC环境创建本地数据文件的解决方法
  8. 带你掌握4种Python 排序算法
  9. 软件过程评估和软件能力评价之间的差异
  10. 打印十字图-蓝桥杯历届试题
  11. java多线程基础篇第一篇-JMM
  12. exe图标修改器和EXE文件打不开了的办法
  13. STM32的ADC多通道采集的实现
  14. uva1391-Astronauts
  15. 关于CVR建模中延迟反馈问题
  16. c代码生成matlab模块,使用 C Caller 模块集成 C 代码
  17. 产品设计体会(0013)产品经理应该是管理者么
  18. 电容笔和触控笔的区别是什么?好用的电容笔测评
  19. 5分绩点转4分_5分GPA3.7转化成4分制大概是多少了
  20. C++ + ubuntu 调用boost 的一个问题

热门文章

  1. linux下(ubuntu)反删除(误删恢复)与回收站制作
  2. HDU 1222 Wolf and Rabbit
  3. poj2793 素数和
  4. Python 全栈开发 -- 监控篇
  5. poj 2240 Arbitrage(bellman-ford spfa 判断正环)
  6. 存储过程之游标笔记小结
  7. ioprofile mysql_使用pt-ioprofile对MySQL作IO剖析
  8. 3d标注_告别繁琐,浩辰3D「文本特征」让设计更智慧!
  9. DataNode逻辑结构
  10. c# 低功耗蓝牙_C#建立从笔记本电脑内部蓝牙4.0到蓝牙低功耗(BLE)外设的流