RMI原理浅析以及调用流程
一、定义RMI: 远程方法调用(Remote Method Invocation),它支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。Java RMI: 用于不同虚拟机之间的通信,这些虚拟机可以在不同的主机上、也可以在同一个主机上;一个虚拟机中的对象调用另一个虚拟上中的对象的方法,只不过是允许被远程调用的对象要通过一些标志加以标识,底层是通过Socket通...
一、定义
RMI: 远程方法调用(Remote Method Invocation),它支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。
Java RMI: 用于不同虚拟机之间的通信,这些虚拟机可以在不同的主机上、也可以在同一个主机上;一个虚拟机中的对象调用另一个虚拟上中的对象的方法,只不过是允许被远程调用的对象要通过一些标志加以标识,底层是通过Socket通信来进行实现的。
代码使用可参考 https://www.jianshu.com/p/de85fad05dcb
二、RMI 主要组件
三、RMI远程调用步骤
RMI的交互图(借鉴网上已有的图):
四、如何开启RMI Registry服务
- 进入JAVA_HOME/bin/,双击打开rmiregistry.exe,此时默认注册端口为1099,也可以在命令行指定端口去运行rmiregistry.exe port 或者 rmiregistry port。
- java程序中使用API创建registry服务,LocateRegistry.createRegistry(port)。
五、RMI服务调用时序图
(借鉴网上已有的图):
六、RMI类调用时序图
-
Server发布服务类调用
-
Registry服务类调用
-
Client订阅服务类调用
七、RMI服务的优缺点
优点:
1. 使用简单,只需要按照规范定义自己的服务对象即可
2. 支持扁平化的服务需求,一个注册中心,多个服务提供者
3. 分布式客户端处理
4. 具有一定的安全性,传输中调用的方法和请求服务均是采用HASH和ObjectId对应
5. 具有分布式内存管理的功能,当一个服务不去注册后,会通过远程内存管理接口来进行内存的回收
缺点:
1. 注册中心和服务提供者必须在同一台机器上,不支持分布式部署的需求
2. 服务提供者服务挂掉以后,注册中心完全感知不到,导致客户端依然会去建立连接,没有服务可用性的检测机制
2. 服务挂掉后,重启的时候需要先去注册掉原来的服务,然后再进行新服务的绑定
3. 不支持重试机制,一次失败后直接操作失败
4. 客户端需要每次请求前都需要去注册中心获取最新的服务信息
5. 序列化效率太差,支持是用的java的序列化机制,数据量大的时候,传输的无用信息很多,日后可以考虑压缩算法
6. 没有负载均衡处理,不支持多个节点提供同样的服务
7. 只能用于JAVA平台中,无法和其他语言开发的服务进行对接
9. 所有的服务均要从注册中心获取,注册中心挂掉后,所以服务均不可用,存在单点问题
10. 服务端的采用的还是BIO的模式,效率上较基于NIO的Netty框架差很远
11. 缺少服务的统计信息,流量的监控信息
参考:
https://www.iteye.com/blog/liujianhuiouc-2235614
更多推荐
所有评论(0)