使用 RMI + ZooKeeper 实现远程调用框架
在 Java 世界里,有一种技术可以实现“跨虚拟机”的调用,它就是 RMI (Remote Method Invocation,远程方法调用)。例如,服务A 在 JVM1 中运行,服务B 在 JVM2 中运行,服务A 与 服务B 可相互进行远程调用,就像调用本地方法一样,这就是 RMI。在分布式系统中,我们使用 RMI 技术可轻松将 服务提供者 (Service Provider)与 服务消费者 (Service Consumer)进行分离,充分体现组件之间的弱耦合,系统架构更易于扩展。 本文先从通过一个最简单的 RMI 服务与调用示例,让读者快速掌握 RMI 的使用方法,然后指出 RMI 的局限性,最后笔者对此问题提供了一种简单的解决方案,即使用 ZooKeeper 轻松解决 RMI 调用过程中所涉及的问题。 下面我们就从一个最简单的 RMI 示例开始吧! 1 发布 RMI 服务 发布一个 RMI 服务,我们只需做三件事情: 定义一个 RMI 接口 编写 RMI 接口的实现类 通过 JNDI 发布 RMI 服务 1.1 定义一个 RMI 接口 RMI 接口实际上还是一个普通的 Java 接口,只是 RMI 接口必须继承 java.rmi.Remote ,此外,每个 RMI 接口的方法必须声明抛出一个 java.rmi.RemoteException 异常,就像下面这样: <!--