RMI实现RPC

RMI实现RPC

1 RMI简 介

​ RMI(Remote Method Invocation) 远程方法调用。

​ RMI是从JDK1.2推出的功能,它可以实现在一个Java应用中可以像调用本地方法一样调用另一个服务器中Java应用(JVM)中的内容。

​ RMI 是Java语言的远程调用,无法实现跨语言。

2 执行流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4J74SGaq-1634351234448)(RPC.assets/rpc-03.png)]

​ Registry(注册表)是放置所有服务器对象的命名空间。 每次服务端创建一个对象时,它都会使用bind()或rebind()方法注册该对象。 这些是使用称为绑定名称的唯一名称注册的。

​ 要调用远程对象,客户端需要该对象的引用。即通过服务端绑定的名称从注册表中获取对象(lookup()方法)。

3 API介绍

3.1 Remote

​ java.rmi.Remote 定义了此接口为远程调用接口。如果接口被外部调用,需要继承此接口。

public interface Remote{}

3.2 RemoteException

​ java.rmi.RemoteException

​ 继承了Remote接口的接口中,如果方法是允许被远程调用的,需要抛出此异常。

3.3 UnicastRemoteObject

​ java.rmi.server.UnicastRemoteObject

​ 此类实现了Remote接口和Serializable接口。

​ 自定义接口实现类除了实现自定义接口还需要继承此类。

3.4 LocateRegistry

​ java.rmi.registry.LocateRegistry

​ 可以通过LocateRegistry在本机上创建Registry,通过特定的端口就可以访问这个Registry。

3.5 Naming

​ java.rmi.Naming

​ Naming定义了发布内容可访问RMI名称。也是通过Naming获取到指定的远程方法。

4 代码实现

4.1 服务端创建

​ 创建RmiServer项目

4.1.1 编写接口

​ com.mrshun.service.DemoService 编写

public interface DemoService extends Remote {
    String demo(String demo) throws RemoteException;
}
4.1.2 编写实现类

​ com.mrshun.service.impl.DemoServiceImpl 编写。

​ 注意:构造方法是public的。默认生成protected

public class DemoServiceImpl extends UnicastRemoteObject implements DemoService {
    public DemoServiceImpl() throws RemoteException {
    }
    @Override
    public String demo(String demo) throws RemoteException {
        return demo+"123";
    }
}
4.1.3 编写主方法

​ 编写com.mrshun.DemoServer类,生成主方法

public class DemoServiceImpl extends UnicastRemoteObject implements DemoService {
    public DemoServiceImpl() throws RemoteException {
    }
    @Override
    public String demo(String demo) throws RemoteException {
        return demo+"123";
    }
}
4.1.4 运行项目

​ 运行后项目,项目一直处于启动状态,表示可以远程访问此项目中的远程方法。

4.2 创建客户端代码

​ 创建项目RmiClient

4.2.1 复制服务端接口

​ 把服务端com.mrshun.service.DemoService粘贴到项目中

4.2.2 创建主方法类

​ 新建com.mrshun.DemoClient

public class DemoServiceImpl extends UnicastRemoteObject implements DemoService {
    public DemoServiceImpl() throws RemoteException {
    }
    @Override
    public String demo(String demo) throws RemoteException {
        return demo+"123";
    }
}

Guess you like

Origin blog.csdn.net/qq_46144237/article/details/120795177
RPC
RPC