学习、分享

站在巨人的肩膀上

JAVA 远程方法调用 (RMI)

本文整理JAVA中的进阶知识,力图以最简洁的方式理解JAVA的博大精深。

远程方法调用–RMI

Remote Methed Invocation 是分布式架构的基础。

以下实现一个简单的分布式小程序——计算两个数的和。
1. 编写接口 AddI.java
2. 实现接口(远程对象) AddC.java
3. 服务端 Server.java
4. 客户端 Client.java

其中接口是整个程序的指导性文件,其定义了分布式程序共有的方法,包括方法名、参数和返回值。
服务端实现接口的具体内容,并开启监听,对客户端提供服务。
客户端根据接口文件提供的方法,进行调用。接口是二者调用传送数据的凭证。

为了代码的简洁,我未给出包的引用,编译器可以自动提示添加即可,或者自己添加java.rmi.*java.rmi.Registry.*

定义接口,接口要继承自Remote才支持远程调用,方法必须进行异常处理

实现接口,即远程对象,需要继承自UnicastRemoteObject

服务端绑定端口,提供调用服务

客户端根据AddI接口调用方法

编译与调用:

服务端
服务端
再开一个终端
客户端

问题:
服务端和客户端在不同机器上时,上面运行可能出现 java.rmi.ConnectException: Connection refused to host: 127.0.1.1 或者 java.rmi.ConnectException: Connection refused to host: 127.0.0.1 ,这都是服务端引起的,服务端所在的主机hostname对应的ip与客户端连接它使用的ip不对应。我们可以在服务端通过hostname -i查看对应的ip,rmi机制中,当客户端请求连接服务端后,服务端要返回hostname对应ip确认,而此时hostname对应ip与客户端请求不符合,将造成上面的错误,因此解决方法是:修改 /etc/hosts ,将主机名对应的ip修改为真实ip。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注