}
@Override
public String helloWorld(String name) {
return "[Registry] 你好! " + name;
}
}
客户端:
public class RegistryClient {
public static void main(String[] args) {
try {
Registry registry = LocateRegistry.getRegistry(1099);
HelloRegistryFacade hello = (HelloRegistryFacade) registry.lookup(“HelloRegistry”);
String response = hello.helloWorld(“ZhenJin”);
System.out.println(“=> " + response + " <=”);
} catch (NotBoundException | RemoteException e) {
e.printStackTrace();
}
}
}
图解:
出处:https://www.tutorialspoint.com/java_rmi/java_rmi_introduction.htm
Registry(注册表)是放置所有服务器对象的命名空间。
每次服务端创建一个对象时,它都会使用bind()或rebind()方法注册该对象。
这些是使用称为绑定名称的唯一名称注册的。
要调用远程对象,客户端需要该对象的引用,如(HelloRegistryFacade)。
即通过服务端绑定的名称(HelloRegistry)从注册表中获取对象(lookup()方法)。
(2) 使用Naming方法实现rmi
服务端:
public class NamingService {
public static void main(String[] args) {
try {
// 本地主机上的远程对象注册表Registry的实例
LocateRegistry.createRegistry(1100);
// 创建一个远程对象
HelloNamingFacade hello = new HelloNamingFacadeImpl();
// 把远程对象注册到RMI注册服务器上,并命名为Hello
//绑定的URL标准格式为:rmi://host:port/name
Naming.bind(“rmi://localhost:1100/HelloNaming”, hello);
System.out.println(“======= 启动RMI服务成功! =======”);
} catch (RemoteException | MalformedURLException | AlreadyBoundException e) {
e.printStackTrace();
}
}
}
接口和接口实现和Registry的方式一样
客户端:
public class NamingClient {
public static void main(String[] args) {
try {
String remoteAddr=“rmi://localhost:1100/HelloNaming”;
HelloNamingFacade hello = (HelloNamingFacade) Naming.lookup(remoteAddr);
String response = hello.helloWorld(“ZhenJin”);
System.out.println(“=> " + response + " <=”);
} catch (NotBoundException | RemoteException | MalformedURLException e) {
e.printStackTrace();
}
}
}
Naming部分源码:
public static Remote look