JAVA中最简单的分布式调用RMI.docx

JAVA中最简单的分布式调用RMI.docx

ID:62161341

大小:22.88 KB

页数:13页

时间:2021-04-19

JAVA中最简单的分布式调用RMI.docx_第1页
JAVA中最简单的分布式调用RMI.docx_第2页
JAVA中最简单的分布式调用RMI.docx_第3页
JAVA中最简单的分布式调用RMI.docx_第4页
JAVA中最简单的分布式调用RMI.docx_第5页
资源描述:

《JAVA中最简单的分布式调用RMI.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、优选JAVA中最简单的分布式调用RMI系统中目前存在两个JAVA服务,分别是服务A、服务B。现在服务A想要调用服务B中的某个服务,我们怎么实现呢?有人觉得这不很简单,服务B暴露一个服务接口,服务A通过RPC的方式来访问这个接口,这里的RPC可以引用第三方实现,也可以通过简单的REST请求的方式实现。是的,解决这场景的方法有很多,其实JAVA自身也提供了一种更简单的方式,即通过RMI实现跨JVM虚拟机的远程调用。虽然它和现在主流的RPC相比,可能显得比较无力。但是其设计思想,加上它的简单易用,我们不

2、妨来看一下。RMI简介RMI(RemoteMethodInvocation)是一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。特点·是JAVA自带的功能,无需集成任何的外部扩展;·数据传输是面向对象的;13/13优选·动态下载对象资源;·仅限JAVA间通信;通信协议服务间的通信通过TCP传输。协议约定为rmi://,仅限JAVA之间的远程通信;成员·RMIRegistry:作为存储远程服务的代

3、理对象的仓库·Server:服务端,暴露远程对象,并将其代理对象注册进RMIRegistry·Client:客户端,查找远程代理对象,远程调用服务对象13/13优选运行机制从上图可以看出,虽然RMI目前看上去有点过时了,但其思想和现在的服务注册与发现还是很相似的。归纳起来,包含以下几点:1.启动注册中心2.服务端:暴露服务13/13优选1.服务端:服务注册2.客户端:获取服务地址(代理对象)3.客户端:远程调用服务使用方法·启动RMIRegistry这里启动仓库有两种方式,一种是在程序中启动:im

4、port java.rmi.registry.LocateRegistry;Registry registry = LocateRegistry.createRegistry(REGISTRY_PORT);另一种通过命令启动:/usr/bin/rmiregistry REGISTRY_PORT·获取RMIRegistry·通过环境变量java.rmi.server.hostname来设置仓库地址import java.rmi.registry.LocateRegistry;Registry reg

5、istry = LocateRegistry.getRegistry(REGISTRY_PORT)·定义远程服务接口·接口继承Remote·接口方法必须抛出RemoteExceptionimport java.rmi.Remote;public interface RemoteService extends Remote {    //define your function    Object run() throws RemoteException;}13/13优选·UnicastRemote

6、Object.exportObject(Remoteobj,intport)·创建Remote对象的代理类,并实现Serializable接口·在TCP上暴露远程服务·port为0表示使用匿名随机端口( 使用1~1023的已知端口时,注意权限问题 )import java.rmi.server.UnicastRemoteObject;Remote remoteProxy = UnicastRemoteObject.exportObject(your_remote_service, 0);·注册远程

7、对象到RMIRegistry( 在Registry中的都是对象的远程代理类,并非真正的对象 )获取Registry的远程代理类,然后调用它的rebind将代理对象注册进仓库中(Naming.rebind(Stringname,Remoteobj)本质上也是解析name中的仓库地址,获取仓库的代理对象,进而进行远程注册 )// 本地创建或远程获取 RegistryRegistry registry = ...registry.rebind(String name, Remote obj);·查找远程

8、调用对象Registry registry = LocateRegistry.getRegistry(REGISTRY_PORT);Remote obj = registry.lookup(REMOTE_NAME);示例###准备工作:定义远程对象接口13/13优选package .test.remote;import java.rmi.Remote;import java.rmi.RemoteException;public interface RemoteService ext

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。