前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RMI(远程方法调用)介绍 转

RMI(远程方法调用)介绍 转

作者头像
wuweixiang
发布2018-08-14 14:22:36
1.3K0
发布2018-08-14 14:22:36
举报
文章被收录于专栏:吴伟祥吴伟祥

本文简单介绍下RMI。即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽可能简化远程接口对象的使用。

1.RMI介绍

RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机上的对象可以调用另外一台计算机上的对象来获取远程数据。 RMI是针对JAVA有效的RPC,常用于一个jvm中调用另外一个jvm中的Service方法获得数据。

2.RMI原理:

RMI流程原理如下图:

00
00

1.rmi服务注册他的名字和IPRMI注册中心(bind) 2.rmi客户端通过IP和名字去RMI注册中心找相应的服务(lookup) 3.rmi Stub序列化调用的方法和参数编组后传给rmi Skeleton(call) 4.rmi skeleton执行stub的逆过程,调用真实的server类执行该方法(invocation) 5.rmi skeleton将调用函数的结果返回给stub(return)

Java RMI(远程方法调用) 实例与分析

java远程调用rmi入门实例

切记:相关的类的包的路径要跟服务器一样

有了远程对象实现类,看服务端的启动逻辑,其中:

代码语言:javascript
复制
Registry rr = LocateRegistry.createRegistry(1234);

LocateRegistry类:用于创建或获取某端口的对象注册表

LocateRegistry.createRegistry:这个方法表示获得远程对象注册表引用,返回Registry对象

Registry:真正操作远程对象注册表的接口

接着,

代码语言:javascript
复制
rr.bind("testrmi", r);

利用Registry的对象,把刚刚创建的远程对象注册为名称testrmi. 这里还有一种写法,效果是一样的.

代码语言:javascript
复制
LocateRegistry.createRegistry(1234); //创建,如果已经创建了就可省略这一句
Naming.bind("rmi://localhost:1234/testrmi", r);//需要带上端口

Naming:与对象注册表交互的工具类

上面是服务端从远程对象创建到对象注册的整个逻辑.客户端调用的逻辑比较简单,先通过Naming工具类获取到远程对象的引用以后,就可以正常使用了

代码语言:javascript
复制
(IRemote) Naming.lookup("rmi://localhost:1234/testrmi");

这里返回的"引用"和通常讲的对象引用不同,是远程对象的引用信息.拿到这个"引用"以后就可以像使用真正的对象一样调用其中的方法.

客户端再访问就会出现异常了,rmi所有远程方法都不能用了! 异常信息:java.rmi.NoSuchObjectException: no such object in table 答: 服务器端的服务对象被垃圾回收了。建议把服务对象变成静态成员。  public static ServerObject serverObject =new ServerObject ();  ......  Naming.rebind(serverName, serverObject); 

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.RMI介绍
  • 2.RMI原理:
  • Java RMI(远程方法调用) 实例与分析
  • java远程调用rmi入门实例
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档