RMI
RMI
remote method invocation,可以认为是 RPC 的 Java 版本,允许运行在一个 Java 虚拟机的对象调用运行在另一个 Java 虚拟机上的对象方法。
RMI 使用的是 JRMP(Java Remote Messageing Protocol)协议,JRMP 是专门为 Java 定制的通信协议,所以是纯 Java 的分布式解决方案。
实现 RMI 程序
- 创建一个远程接口,并继承 java.rmi.Remote 接口。
- 实现远程接口,并且继承 UnicastRemoteObject。
- 创建服务器程序,同时使用 createRegistry 方法注册远程接口对象。
- 创建客户端程序,通过 Naming 类的 lookup 方法来远程调用接口中的方法。
RMI 有局限性:需要继承接口和抽象类,使用起来非常的不方便。
服务类
public interface IOrder extends Remote {
String pay(String id) throws RemoteException;
}
public class OrderImpl extends UnicastRemoteObject implements IOrder {
public OrderImpl() throws RemoteException {
super();
}
@Override
public String pay(String id) throws RemoteException {
return "支付成功,编号:" + id;
}
}
RMI 服务端
@Log4j
public class RMIServer {
public void start() {
try {
OrderImpl order = new OrderImpl();
LocateRegistry.createRegistry(8888);
Naming.bind("rmi://localhost:8888/order", order);
log.debug("RMI 服务端启动成功");
Thread.sleep(10000);
} catch (RemoteException | MalformedURLException | AlreadyBoundException | InterruptedException e) {
e.printStackTrace();
}
}
}
RMI 客户端
@Log4j
public class RMIClient {
public void start() {
try {
Remote lookup = Naming.lookup("rmi://localhost:8888/order");
String msg = ((IOrder) lookup).pay("123456");
log.info(msg);
} catch (NotBoundException | MalformedURLException | RemoteException e) {
e.printStackTrace();
}
}
}
相关文章:
RPC

浙公网安备 33010602011771号