RMI的简单介绍

大家好,我是IT修真院武汉分院第15期学员,一枚正直善良的JAVA程序员。

今天给大家分享一下,java学习中需要使用的RMI的简单介绍

 


1.背景介绍

 

RMI:远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。

RMI应用程序通常包括两个独立的程序:服务器程序和客户机程序。典型的服务器应用程序将创建多个远程对象,使这些远程对象能够被引用,然后等待客户机调用这些远程对象的方法。 而典型的客户机程序则从服务器中得到一个或多个远程对象的引用,然后调用远程对象的方法,RMI为服务器和客户机进行通信和信息传递提供了一种机制。

 


2.知识剖析

SpringRMI

我们知道Spring喜欢做封装,所以SpringRMI其实也是对RMI进行了封装,然后使我们使用的时候更加简便,可操作性更强

Spring RMI中,主要有两个类,服务端使用RmiServiceExporter暴露RMI远程方法,客户端用RmiProxyFactoryBean间接调用远程方法。

 

一个正常工作的RMI系统由下面几个部分组成:

1.远程服务的接口定义,RMI命名服务,暴露远程方法
2.远程服务接口的具体实现
3.一个需要调用远程服务的客户端

 


3.常见问题

RMI远程方法调用的优点。

分布式应用的优点

RMI有什么劣势


4.解决方案

 

1.面向对象:RMI可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。也就是说,您可以将类似Java哈希表这样的复杂类型作为一个参数进行传递。

2.可移动属性:RMI可将属性(类实现程序)从客户机移动到服务器,或者从服务器移到客户机。这样就能具备最大的灵活性,因为政策改变时只需要您编写一个新的Java类,并将其在服务器主机上安装一次即可。

3.安全:RMI使用Java内置的安全机制保证下载执行程序时用户系统的安全。

4.便于编写和使用:编写RMI实际上就是 编写java接口可连接现有/原有的系统: RMI可利用标准Java本机方法接口JNI与现有的和原有的系统相连接编写一次,到处运行

5.分布式垃圾收集: RMI采用其分布式垃圾收集功能收集不再被网络中任何客户程序所引用的远程服务对象。

6.并行计算:RMI采用多线程处理方法,可使您的服务器利用这些Java线程更好地并行处理客户端的请求。

7.设计方式:对象传递功能使您可以在分布式计算中充分利用面向对象技术的强大功能,如二层和三层结构系统。如果您能够传递属性,那么您就可以在您的解决方案中使用面向对象的设计方式。所有面向对象的设计方式无不依靠不同的属性来发挥功能,如果不能传递完整的对象--包括实现和类型--就会失去设计方式上所提供的优点。

8.可连接现有/原有的系统:RMI可通过Java的本机方法接口JNI与现有系统进行进行交互。利用RMI和JNI,您就能用Java语言编写客户端程序,还能使用现有的服务器端程序。在使用RMI/JNI与现有服务器连接时,您可以有选择地用Java重新编写服务程序的任何部分,并使新的程序充分发挥Java的功能。类似地,RMI可利用JDBC、在不修改使用数据库的现有非Java源代码的前提下与现有关系数据库进行交互。

 

 

1.降低耦合度,增删一个功能,不会影响其它功能模块
2.因为优点1的存在,对于团队来说,可以更好的分配开发任务,比如各个团队负责一个独立的模块,开发完成后,只需要利用webservice服务的形式将模块的功能以API的形式开放出来

 

 

RMI的局限性之一是RMI是Java语言的远程调用,两端的程序语言必须是Java实现,对于不同语言间的通讯可以考虑用Web Service或者公用对象请求代理体系(CORBA)来实现
对服务器的IP地址和端口依赖很紧密,但是在开发的时候不知道将来的服务器IP和端口如何,但是客户端程序依赖这个IP和端口。这也是RMI的局限性之一。这个问题有两种解决途径:一是通过DNS来解决,二是通过封装将IP暴露到程序代码之外。

 


5.编码实战

 


6.扩展思考

 

分布式应用的优点

1.降低耦合度,增删一个功能,不会影响其它功能模块
2.因为优点1的存在,对于团队来说,可以更好的分配开发任务,比如各个团队负责一个独立的模块,开发完成后,只需要利用webservice服务的形式将模块的功能以API的形式开放出来

 

RMI有什么劣势

RMI的局限性之一是RMI是Java语言的远程调用,两端的程序语言必须是Java实现,对于不同语言间的通讯可以考虑用Web Service或者公用对象请求代理体系(CORBA)来实现
对服务器的IP地址和端口依赖很紧密,但是在开发的时候不知道将来的服务器IP和端口如何,但是客户端程序依赖这个IP和端口。这也是RMI的局限性之一。这个问题有两种解决途径:一是通过DNS来解决,二是通过封装将IP暴露到程序代码之外。

 

 


7.参考文献

 

参考一:https://blog.csdn.net/huang9012/article/details/7823385

参考二:http://www.blogjava.net/zhenyu33154/articles/320245.html

 


8.更多讨论

今天的分享就到这里啦,欢迎大家提问和探讨!

上一篇Nginx如何实现负载均衡,Nginx负载均衡的几种方式。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页