通过java提供的RMI机制,可以实现一个分布式服务的系统,简单的RMI实现的系统的结构如下
UnicastRemoteObject是java提供的类,只要继承然后写实现就好,该类封装好了RMI通信的很多细节,Remote类也是。
APPInterface是提供给client的一个接口,可以隐藏服务端的具体实现。
APPinterfaceImplementation实现APPInterface接口的类,保留在服务端,在这个类里写具体的方法实现,除了实现接口定义的方法,
还可以另外写其他的方法用于内部调用或管理。
client类就是向register查找服务,然后通过APPInterface向服务端发送方法调用请求。
server类是向register注册服务,将APPInterfaceImplementation类与相应的服务名绑定,将服务名在register注册,这样client就可以
在register查找到对应的服务,然后进行远程方法调用了。
简单实现了下
//SimpleRMIInterface.java
import java.rmi.Remote;
public interface SimpleRMIInterface extends java.rmi.Remote {
public String SimpleRMIHello(String name) throws java.rmi.RemoteException;
}
//javac SimpleRMIInterface.java
//SimpleRMIImpl.java
import java.rmi.server.UnicastRemoteObject;
public class SimpleRMIImpl extends UnicastRemoteObject implements SimpleRMIInterface {
public SimpleRMIImpl() throws java.rmi.RemoteException {
super();
}
public String SimpleRMIHello(String name) throws java.rmi.RemoteException {
return "hello " + name;
}
}
//javac SimpleRMIImpl.java
//rmic SimpleRMIImpl
//SimpleRMIServer.java
import java.rmi.Naming;
public class SimpleRMIServer {
public SimpleRMIServer() {
try {
SimpleRMIInterface simpleRMIObj = new SimpleRMIImpl();
Naming.rebind("rmi://localhost:10099/SimpleRMIService", simpleRMIObj);
} catch(Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) {
new SimpleRMIServer();
}
}
//SimpleRMIClient.java
import java.rmi.Naming;
public class SimpleRMIClient {
public static void main(String[] args) {
try {
String hostName = "localhost";
String port = "1099";
String registeryURL = "rmi://" + hostName + ":" + port + "/SimpleRMIService";
SimpleRMIInterface simpleRMIObj = (SimpleRMIInterface)Naming.lookup(registeryURL);
System.out.println(simpleRMIObj.SimpleRMIHello("world"));
} catch (Exception e) {
System.out.println(e);
}
}
}