RMI及其高可用(ZK实现)
RMI
- 远程方法调用。如主机A远程调用主机B上的方法。
- 本地主机实际上调用的是远程主机提供的远程接口的实现类
- java原生的RMI框架需要注意:
- 客户端和服务端需要使用【相同的接口】。即客户端和服务端均需要创建相同名称的接口(包名也要相同)
- 服务端需要指定rmi服务器的IP地址,此IP地址必须与发布的资源所在的IP地址一致
System.setProperty("java.rmi.server.hostname","服务所在的IP地址"); // 声明rmi服务端所在的ip地址(也可用主机名,但需要在hosts文件中作映射) String location = "rmi://服务所在的IP地址:端口/包名.远程接口的实现类名称" // 服务端发布的资源地址
基于ZK集群实现的高可用RMI
- 为避免单点故障,可设置高可用RMI,通过zk集群实现。
- 多个RMI服务端发布服务后,分别连接zk集群并在其中一个节点上注册临时节点,并将资源地址写入znode
- RMI客户端连接zk并监听该父节点,并获取所有子节点中的数据(资源所在地址)
- 客户端根据地址调用服务端远程接口的实现类方法