发表于: 2020-07-15 22:34:30
1 1481
今天完成的事情:
1.学习RMI
单看理论还是有点难理解,写个入门项目实践一下。
主要有以下几个步骤:
1. 创建远程接口及声明远程方法
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.time.LocalDateTime;
public interface Clock extends Remote {
LocalDateTime currentTime() throws RemoteException;
}
2. 实现远程接口及远程方法
import java.rmi.RemoteException;
import java.time.LocalDateTime;
public class ClockImpl implements Clock{
public LocalDateTime currentTime() throws RemoteException {
return LocalDateTime.now();
}
}
3. 启动RMI注册服务,并注册远程对象
import java.rmi.AlreadyBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
public class ClockServer {
public static void main(String[] args) {
try{
Clock impl = new ClockImpl();
Clock stub = (Clock) UnicastRemoteObject.exportObject(impl,1099);
LocateRegistry.createRegistry(1099);
Registry registry = LocateRegistry.getRegistry();
registry.bind("Clock",stub);
System.out.println("ClockServer is ready.");
}catch (RemoteException e){
System.out.println("创建远程对象异常");
e.printStackTrace();
} catch (AlreadyBoundException e) {
e.printStackTrace();
}
}
}
4. 客户端查找远程对象,并调用远程方法
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.time.LocalDateTime;
public class ClockClient {
public static void main(String[] args) throws Exception{
Registry registry = LocateRegistry.getRegistry(null);
Clock clock = (Clock) registry.lookup("Clock");
LocalDateTime dt = clock.currentTime();
System.out.println("RMI result:" + dt);
}
}
5. 执行程序:启动服务;运行客户端进行调用
这只是在本地模拟的,将项目部署到服务器,运行ClockServer:
本地运行ClockClient:
运行成功!
这里卡了好久,部署到服务器时地址需要修改一下:
只改下面的地址是不行的!!!必须加上面那句。
有点理解RMI了,我的理解是,将主要代码放到服务端,客户端直接远程调用方法即可,来实现调用另一台机器上的方法。
收获:初步学会使用RMI
明天计划完成的事情:
开始学习SpringRMI
评论