官方文档:docs.oracle.com/javase/6/do…
RPC 概念:juejin.cn/post/707307…
简介
Java RMI (Remote Method Invocation)- 远程方法调用,能够让客户端像使用本地调用一样调用服务端 Java 虚拟机中的对象方法。RMI 是面向对象语言领域对 RPC (Remote Procedure Call)的完善,用户无需依靠 IDL 的帮助来完成分布式调用,而是通过 依赖接口 这种更简单自然的方式。
基本概念
Java RMI 是 Java 领域创建 分布式应用 的技术基石。后续的 EJB 技术,以及现代的分布式服务框架,其中的基本理念依旧是 Java RMI 的延续。在 RMI 调用中,有以下几个核心的概念:
- 通过接口进行远程调用
- 通过客户端的
Stub对象和服务端的Skeleton对象的帮助将远程调用伪装成本地调用 - 通过
RMI注册服务完成服务的注册和发现
对于第一点,客户端需要依赖接口,而服务端需要提供该接口的实现。
对于第二点,在
J2SE 1.5版本之前需要通过rmic预先编译好客户端的Stub对象和服务端的Skeleton对象。在之后的版本中,不再需要事先生成Stub和Skeleton对象。
JDK实现
java.rmi.* 包提供 RMI 实现
原理
一个典型的 RMI 调用:
- 服务端向
RMI注册服务绑定自己的地址, - 客户端通过
RMI注册服务获取目标地址, - 客户端调用本地的
Stub对象上的方法,和调用本地对象上的方法一致, - 本地
Stub对象将调用信息打包,通过网络发送到服务端, - 服务端的
Skeleton对象收到网络请求之后,将调用信息解包, - 然后找到真正的服务对象发起调用,并将返回结果打包通过网络发送回客户端。