一、背景介绍
RMI是Java的一组拥护开发分布式应用程序的API。RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。
Java远程方法协议(英语:Java Remote Method Protocol,JRMP)是特定于Java技术的、用于查找和引用远程对象的协议。这是运行在Java远程方法调用(RMI)之下、TCP/IP之上的线路层协议
RMI技术早在JDK1.1中就出现了,并且在JDK1.5版本做了重大改进,使得我们可以更加简单的使用RMI技术来支持分布式应用。关于详细的技术变更历史,可以参见官方的 Java RMI release Note。
通过RMI技术,本地虚拟机JVM可以调用存在于另外一个JVM中的对象方法,就好像该虚拟机调用存在于本地JVM的某个对象方法一样。而另外一个JVM可以与本地JVM在同一台物理机,也可以属于不同的物理机。
常见的可以实现远程调用的技术还包括了 RPC,CORBA,Web Service,这里不一一介绍,需要了解的同学可以 google,以下只关注 RMI 这个只针对 Java 语言的远程调用技术的一些阐述。
二、知识剖析
( 1 ) RMI 注册表(参见 LocateRegistry 类)
*为了使得客户端能够查找到服务端对外提供的远程对象,RMI需要维护一个RMI注册表,该注册表维护了对于客户端而言的远程对象位置,对外提供了服务,服务端需要将要外提供服务的对象的代理绑定到RMI注册表中。
*RMI注册表可以跟服务端不在一台主机上。
*RMI注册表的启动有两种方式:一种是通过命令行 rmiregistry $port 在命令行启动;另外一种是通过 LocateRegistry 类的 createRegistry(int port) 方法启动。
(2)
客户端查找远程对象,服务端注册远程对象的多样性
也许在网上查看各种RMI示例代码时我们常常发现客户端查找远程对象,服务端注册远程对象使用的代码都不尽相同,我在学习过程中见到的有三种途径:
LocateRegistry 类的对象的 rebind() 和 lookup() 来实现绑定注册和查找远程对象的
利用命名服务 java.rmi.Naming 类的 rebind() 和 lookup() 来实现绑定注册和查找远程对象的
( 3 )
利用JNDI(Java Naming and Directory Interface,Java命名和目录接口) java.naming.InitialContext 类来 rebind() 和 lookup() 来实现绑定注册和查找远程对象的
三、
Spring RMI一开始看网上的资料感觉很简单,但一次一次的失败告诉我,那不简单
提问与回答
笑然:rmi 服务端不指定端口 怎么样
答:不指定会使用默认的1099
程远:rmi 怎么在service做负载均衡
答:配置权
明达:可以通过spring对rmi更加简化么。
可以将rmi的xml文件集成到spring里面
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧 !