RMI

RMI

remote method invocation,可以认为是 RPC 的 Java 版本,允许运行在一个 Java 虚拟机的对象调用运行在另一个 Java 虚拟机上的对象方法。
RMI 使用的是 JRMP(Java Remote Messageing Protocol)协议,JRMP 是专门为 Java 定制的通信协议,所以是纯 Java 的分布式解决方案。

实现 RMI 程序

  1. 创建一个远程接口,并继承 java.rmi.Remote 接口。
  2. 实现远程接口,并且继承 UnicastRemoteObject。
  3. 创建服务器程序,同时使用 createRegistry 方法注册远程接口对象。
  4. 创建客户端程序,通过 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

posted @ 2021-02-02 14:32  qianbuhan  阅读(341)  评论(0)    收藏  举报