课堂课题:
什么是RMI,什么是RPC,两者之间的区别是什么?
关联任务:
任务五
直播时间:
2019-07-27 15:00:00
课堂内容:
视频链接:
PPT链接:
提交按钮:
小课堂内容格式
标题:
【修真院xx(职业)小课堂】课题名称
开场语:
大家好,我是IT修真院XX分院第X期的学员XX,一枚正直纯洁善良的XX程序员,今天给大家分享一下,修真院官网XX(职业)任务X,深度思考中的知识点——XXX
(1)背景介绍:
背景介绍的时候,尽可能的要宽广,讲清楚来龙去脉,讲清楚为什么会需要这个技术。
(2)知识剖析:
讲知识点的时候,尽可能的成体系,学会成体系的去给别人介绍知识。现在很多做的都是零散的,没有分类。
(3)常见问题:
最少列出1个常见问题。
(4)解决方案:
写清楚常见问题的解决方案。
(5)编码实战:
尽可能的去寻找在真实项目中在用的。如果你能找到某个网站在用你说的知识点,这是最好的。学以致用,否则当成练习题就没有意义了。多准备一些demo,讲解过程中将知识点和demo结合,便于大家理解所讲解的知识点。
(6)拓展思考:
知识点之外的拓展思考,由分享人进行讲解,这些东西就是所谓的深度,也是一个人技术水准高低比较的表现。
(7)参考文献:
引入参加文献的时候,在引用的句子后面加上序号【1】。参考文献中列出详细来源。不要去抄别人的东西,这是一个基本的态度。
(8)更多讨论:
Q1:提问人:问题?
A1:回答人(可以是分享人,也可以是其他学员):回答
Q2:提问人:问题?
A2:回答人(可以是分享人,也可以是其他学员):回答
Q3:提问人:问题?
A3:回答人(可以是分享人,也可以是其他学员):回答
(9)鸣谢:
感谢XX、XX师兄,此教程是在他们之前技术分享的基础上完善而成。
(10)结束语:
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
【修真院Java小课堂】
大家好,我是IT修真院武汉分院第18期的学员徐海鹏,一枚正直纯洁善良的Java程序员,今天给大家分享一下,修真院官网java任务七,深度思考中的知识点——什么是RMI,什么是RPC,两者之间的区别是什么?
(1)背景介绍:
RPC是什么
RPC(Remote Procedure Call) 翻译过来叫远程过程调用,加上 Protocol 之后也可以叫远程过程调用协议,可以由不同的语言实现,根据维基百科的解释 —— RPC 指在分布式环境下,一个计算机程序能调用另一个不同地址空间里的方法(不同地址空间通常指局域网下的另一台计算机),但是编码的形式就像调用一个本地方法一样,程序员不用去关心背后的细节。
RMI是什么
Java RMI,即 远程方法调用(Remote Method Invocation),一种用于实现远程过程调用(RPC)(Remote procedure call)的Java API,能直接传输序列化后的Java对象和分布式垃圾收集。它的实现依赖于Java虚拟机(JVM),因此它仅支持从一个JVM到另一个JVM的调用。
(2)知识剖析:
客户端(Client)
桩(StubObject):远程对象在客户端上的代理
远程引用层(RemoteReference Layer):解析并执行远程引用协议
传输层(Transport):发送调用、传递远程方法参数、接收远程方法执行结果
服务端(Server)
骨架(Skeleton):读取客户端传递的方法参数,调用服务器方的实际对象方法,并接收方法执行后的返回值
远程引用层(Remote ReferenceLayer):处理远程引用语法之后向骨架发送远程方法调用
传输层(Transport):监听客户端的入站连接,接收并转发调用到远程引用
RMI远程访问基本流程
1). 服务端定义远程访问接口
2). 服务端通过RmiServiceExporter暴露服务接口
3). 客户端定义与服务端已暴露的相同接口
4). 客户端通过RmiProxyFactoryBean调用服务接口
RMI远程调用步骤:
方法调用从客户对象经占位程序(Stub)、远程引用层(Remote Reference Layer)和传输层(Transport Layer)向下, 传递给主机,然后再次经传 输层,向上穿过远程调用层和骨干网(Skeleton),到达服务器对象。
占位程序扮演着远程服务器对象的代理的角色, 使该对象可被客户激活。 远程引用层处理语义、管理单一或多重对象的通信,决定调用是发往一个服务器还是多个。传输层管理实际的连接,并且追追踪可以接受方法调用的远程对象。服务器端的骨干网完成对服务器对象实际的方法调用,并获取返回值。返回值向下经远程引用层、服务器端的传输层传递回客户端,再向上经传输层和远程调用层返回。最后,占位程序获得返回值。
注意
1、RMI是很难穿越防火墙的;
2、RMI是基于Java的,这意味着客户端和服务端必须都是采用Java开发的;
3、因为RMI使用了Java的序列化机制,所以通过网络传输的对象类型必须保证在调用的两端是相同的版本。
(3)常见问题:
1、客户端连接不到服务
2、RPC 和 RMI 的区别
(4)解决方案:
1、服务端没有运行,服务端防火墙限制
2、RPC 更像一种协议,可以跨语言实现,而 RMI 仅支持 Java,需要双方都运行在 JVM 中;RPC 通过传入 class 和methodName 的形式利用反射和代理类调用该方法;RMI 需要依靠方法签名去 lookUp,找到了该方法之后调用它;RMI 支持 Java 对象和基本数据类型,而 RPC 通常借助不同的序列化协议来进行网络传输,有编解码的过程
(5)编码实战:
我的GitHub项目地址:https://github.com/xuhaipeng91/Task/tree/master/TaskEight
(6)拓展思考:
1、分布式应用有哪些优点
● 降低耦合度,增删一个功能,不会影响其它功能模块
● 因为优点1的存在,对于团队来说,可以更好的分配开发任务,比如各个团队负责一个独立的模块,开发完成后,只需要利用webservice服务的形式将模块的功能以API的形式开放出来
2、REST 和 RPC 的区别
● REST 是一种架构风格,面向资源(由一个 URL 唯一指定),主要是名词,它很好的利用了 HTTP 中已有的请求方法(PUT、POST、GET、DELETE)做操作形式的区分;而 RPC 主要是动词组成,面向方法,例如方法名为 queryAllBooks,通过客户端和服务端共有的一个方法来进行调用,编码的时候可以像使用本地方法一样,编码效率更高。
● REST 基于 HTTP 传输协议,RPC 的传输协议可以不基于 HTTP,可以采用 TCP、UDP、HTTP、管道通信等技术去实现
后端服务间调用 RPC 性能通常更高,因为实现更底层、封装的数据量更小;而前端请求则通常采用 REST,因为一定要走 HTTP 协议
● 采用 REST 风格的 API,如果一旦要新增一个删除书籍的方法,那么 URL 地址依据不变,变化的仅是请求方法改为 DELETE;而 RPC 如果要增加这个方法,那么必须新建一个 deleteBook(int bookId) 的方法,客户端需要调用这个新方法达成功能但是因为 REST 基于 HTTP 协议,因此通常会有前端代理进行请求分发,这种前端代理层的水平扩展不太容易;但 RPC 服务借助注册中心可以轻易实现服务节点的增删和动态调整
3、什么是JMS
● JMS是java平台上的消息规范。一般JMS消息不是一个XML,而是一个Java对象。
4、JMS 与 RMI 的区别
● 采用 JMS 服务,对象是在物理上被异步从网络的某个 JVM 上直接移动到另一个 JVM 上。
● 而 RMI 对象是绑定在本地 JVM 中,只有函数参数和返回值是通过网络传送的。
(7)参考文献:
参考一:httpsblog.csdn.netchen_kkwarticledetails82823372
参考二:https://www.jianshu.com/p/de85fad05dcb
(8)结束语:
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~