博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RPC框架(一) - Java自带的RMI
阅读量:2442 次
发布时间:2019-05-10

本文共 1296 字,大约阅读时间需要 4 分钟。

    接下来的文章中,我将会去分析Java语言中常用的RPC框架,包括但不限于RMI、dubbo、Hessian、Spring Remoting框架。这篇文章将简要介绍Java语言自带的RMI协议。

 

    RMI(Remote Method Invocation),远程方法调用,程序调用方无需关心跨机器跨进程的协议调用,更多的把精力放在业务上,而且这也隐藏了服务器实现的细节。

    Java RMI整体结构图如下:

    

    一般情况下,Register为注册中心,一般是和Server在同一个Java 虚拟机中。Server通过开启一个注册中心,将所需要发布的服务注册到Register中,Client通过Register和服务类名称,得到服务,然后通过服务进行调用,完成一个RPC过程。

    下面根据源码,和自己的归纳总结,给出下面的细节分析:

1、生成存根Stub和骨架Skeleton对象,实现类需要继承UnicastRemoteObject 类,并通过构造器调用UnicastRemoteObject 的默认构造器。

2、通过命名服务将存根Stub对象注册到注册中心Register

3、客户端Client通过lookup向注册中心Register请求服务的存根Stub

4、注册中心Register向客户端Client返回存根Stub,客户端将Stub强转为相关服务接口

5、客户端Client使用存根Stub对象,进行接口调用

6、存根Stub通过TCP协议socket发起接口调用,通过网络将相关数据传送到socket服务端即骨架Skeleton

7、骨架Skeleton拿到数据,解析并对具体的服务实现类ServerImpl进行调用

8、服务实现类ServerImpl完成在服务端java虚拟机的调用,将结果数据返回给骨架Skeleton

9、骨架Skeleton通过网络协议将结果数据返回存根Stub

10、存根Stub拿到结果返回上层Client,一个调用过程结束

 

即使RMI在一定程度上对于开发来说简便了很多的细节,开发也不需要关心其中的TCP调用过程,但是RMI也存在一定的劣势。主要表现在

1、RMI的Register一般情况下跟Server在同一个Server下,对于分布式的Server集群,Client并不能很智能的选择,无法做到负载均衡等

2、Register对于端口和ip有严重的依赖,一旦服务器更换了ip,那么Client中的注册中心Register就变成不存在的,对应用影响比较大。这同时也说明了RMI框架更加适用于单系统的简单内部项目中,无法在大型分布式系统上得到更多的发展。不过这里存在一个优化的空间,就是单独把注册中心Register从服务端Server中提出来实现。

3、RMI的发展依旧更多的停留在jdk1.1,后期更新比较少。

尽管如此,但是RMI作为早起的RPC框架,依旧给后来的RPC框架带来了很多的参考意义,例如注册中心、协议等等。

 

参考:

(1)https://blog.csdn.net/xinghun_4/article/details/45787549

 

你可能感兴趣的文章
RedHat Enterprise AS4硬盘安装步骤(转)
查看>>
全国第一个高校Linux培训考试中心建立(转)
查看>>
关于Kerberos安装的几个问题(转)
查看>>
Solaris硬盘分区简介(转)
查看>>
gcc编译器小知识FAQ(转)
查看>>
Linux下多线程编程与信号处理易疏忽的一个例子(转)
查看>>
流氓和木马结合 强行关闭你的防火墙(转)
查看>>
SUSE一纸诉状控告SCO 捍卫知识产权(转)
查看>>
debian下编译2.6.13.2内核的步骤及感受(转)
查看>>
预装正版的市场意义(转)
查看>>
创建小于16M XFree86迷你Linux系统(转)
查看>>
shell中常用的工具(转)
查看>>
使用MySQL内建复制功能来最佳化可用性(转)
查看>>
一个比较vista的vista主题for rf5.0fb(转)
查看>>
推荐一款 Linux 上比较漂亮的字体(转)
查看>>
在Linux中添加新的系统调用(转)
查看>>
Fedora Core 5.0 安装教程{下载}(转)
查看>>
把ACCESS的数据导入到Mysql中(转)
查看>>
shell里边子函数与主函数的实例(转)
查看>>
Linux中MAXIMA符号运算软件的简介(转)
查看>>