接口
试了好几十遍,似乎暴露服务与引用服务调用的接口必须是同一个才行
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface RmiService extends Remote {
String getMsg(int param1, int param2) throws RemoteException;
}
暴露服务
实现
import com.spring.boot.rmi.share.RmiService;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class RmiServiceImpl extends UnicastRemoteObject implements RmiService {
public RmiServiceImpl() throws RemoteException {
}
@Override
public String getMsg(int param1, int param2) throws RemoteException {
return param2 + " - " + param1 + " = " + (param2 - param1);
}
}
服务
import com.spring.boot.test.rmi.share.RmiService;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class ExposureServer {
/**
* 服务端端口
*/
private static final int PORT = 12345;
/**
* 远程对象引用名
*/
private static final String METHOD_NAME = "service";
public static void main(String[] args) throws Exception {
RmiService service = new RmiServiceImpl();
System.out.println("暴露接口实现:" + service.getClass().getName());
// 创建注册管理器
Registry registry = LocateRegistry.createRegistry(PORT);
// 把对象绑定到注册管理器上,设置访问名
registry.rebind(METHOD_NAME, service);
}
}
引用服务
import com.spring.boot.rmi.share.RmiService;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class ReferenceServer {
/**
* 暴露服务地址
*/
private static final String HOST = "127.0.0.1";
/**
* 暴露服务端口
*/
private static final int PORT = 12345;
/**
* 远程对象引用名
*/
private static final String METHOD_NAME = "service";
public static void main(String[] args) throws Exception {
// 获取远程注册管理器
Registry registry = LocateRegistry.getRegistry(HOST, PORT);
// 根据引用名获取远程对象
RmiService service = (RmiService) registry.lookup(METHOD_NAME);
System.out.println(service.getMsg(1, 2));
}
}