美文网首页
分布式-RMI

分布式-RMI

作者: watermountain | 来源:发表于2019-02-20 15:50 被阅读0次

    RMI(Remote Method Invoke 远程方法调用)

    主要涉及的接口和类如下图所示:

    RMI 思维导图

    接口Remote:

        远程对象的接口必须扩展Remote 接口。

        接口中的所有方法还必须生命抛出RemoteException 异常(原因:远程方法调用缺乏本地调用的可靠性,远程调用总是存在失败的可能。)

    异常RemoteException

        每一次远程方法调用都必须捕获RemoteException 异常, 并且指明当调用不成功时应执行的相应的操作

    类UnicastRemoteObject

    类UnicastRemoteObject 的构造器使得它的对象可供远程访问。原因是它的构造器中调用了exportObject 方法。代码如下:

    protected UnicastRemoteObject(int port) throws RemoteException{

        this.port = port;

        exportObject((Remote) this, port);

    }

    public static Remote exportObject(Remote obj, int port) throws RemoteException{

        return exportObject(obj, new UnicastServerRef(port));

    }

        实现远程接口中声明方法的类可以继承类UnicastRemoteObject 或在远程对象的构造器中像如下方式调用exportObject 方法:

    UnicastRemoteObject.exportObject(this,0); // 第二个参数为0,表明任何合适的端口都可用来监听客户连接。

    类LocateRegistry

    用于获取特定主机(包括本地主机)上远程对象注册表的引用,或用于创建一个接受对特定端口调用的远程对象注册表。

    实际上通过LocateRegistry类方法获取到的是Registry对象引用(一个 stub),然后我们可以通过该Registry对象引用对“远程对象注册表”进行操作的。更进一步,没有Naming类照样可以进行所有的操作。

    接口Registry

    接口和类的关系如下:

    RMI 使用的接口和类的关系图

    备注:

        使用了Serializable 接口

        Naming类提供存储和获得“远程对象注册表”上远程对象的引用的方法

    Ref:

        Java RMI原理与使用

        Java RMI 框架(远程方法调用)

        java.rmi.Naming和java.rmi.registry.LocateRegistry的区别

    相关文章

      网友评论

          本文标题:分布式-RMI

          本文链接:https://www.haomeiwen.com/subject/dphqeqtx.html