RPC:(Remote Procedure Call) 
  被设计为在应用程序间通信的平台中立的方式,它不理会操作系统之间以及语言之间的差异。 支持多语言

RMI:(Remote Method Invocation) 
RPC 的Java版本,EJB的基础技术 
RMI 采用JRMP(Java Remote Method Protocol)通讯协议,是构建在TCP/IP协议上的一种远程调用方法。 
RMI 采用stubs和skeletons来进行远程对象的通讯。 
  stub充当远程对象的客户端代理,有着和远程对象相同的远程接口。 
  远程对象的调用实际是通过调用该对象的客户端代理对象stub来完成的。

创建远程方法调用的5个步骤:
1)定义一个扩展了Remote接口的接口,该接口中的每一个方法必须声明它将产生一个RemoteException异常;
2)定义一个实现该接口的类;
3)使用rmic程序生成远程实现所需的存根和框架;
  (例如,在demo.rmi.EchoServer.java所在目录运行: rmic demo.rmi.EchoServer)
4)创建一个客户程序和服务器进行RMI调用;
5)启动rmiregistry并运行自己的服务程序和客户程序。

RMI与RPC的区别在于: 
1)方法是如何被调用的
  对RMI来说,如果一个方法在服务器上执行,但是没有相匹配的签名被添加到这个远程接口上,那么这个新方法就不能被RMI客户方所调用。 
  而在RPC中,当一个请求到达RPC服务器时,请求包含一个参数集和一个文本值,通常为“classname.methodname”形式。 
  这表明,请求的方法在“classname”类中,名叫“methodname”。 
  然后,RPC服务器就去搜索与之相匹配的类和方法,并把它作为那种方法参数类型的输入。 
  这里的参数类型是与RPC请求中的类型匹配的。 一旦匹配成功,方法就被调用了,其结果被编码后返回客户方。

2)对传递信息的限制
  RMI 调用远程对象方法,允许方法返回 Java 对象以及基本数据类型。 
  而RPC不允许传递对象,RPC服务的消息由外部数据表示(External Data Representation,XDR)语言来表示。

另外,RMI优于RPC或SOAP的一点是:在程序开发过程中因为对象或方法不匹配造成的错误可以在编译期被发现,而不用等到运行期。

###########################
注:另一篇文章描述RPC与RMI的区别为:
  RMI底层协议为TCP/IP;RPC底层协议为:UDP。
  两个名词没有可比性,因为它们不是一类东西:
    RMI是Sun公司定义的一个Java分布式框架,包括一些Java接口等;而RPC是一个网络协议。
http://kylinsoong.iteye.com/blog/801072 
###########################

JMS: 
JMS是java平台上的消息规范。一般JMS消息不是一个XML,而是一个Java对象。

JMS 与 RMI 的区别在于: 
  采用 JMS 服务,对象是在物理上被异步从网络的某个 JVM 上直接移动到另一个 JVM 上。 
  而 RMI 对象是绑定在本地 JVM 中,只有函数参数和返回值是通过网络传送的。

SOAP与JMS对比: 
1)SOAP专注于远程服务调用,JMS专注于信息交换。
2)大多数情况下soap是两系统间的直接交互(Consumer <--> Producer),而大多数情况下JMS是三方系统交互(Consumer <- Broker -> Producer)。 
  当然,JMS也可以实现request-response模式的通信,只要Consumer或Producer其中一方兼任broker即可。
3)多数情况下,WS是同步的,JMS是异步。虽然,WS也可以是异步的,而JMS也可以是同步的。

参考文档:

http://visionsky.blog.51cto.com/733317/438693 (Java RMI与RPC,JMS的比较)

http://wenku.baidu.com/view/309850c66137ee06eff91892.html (RMI与RPC)

http://blog.csdn.net/yangdelong/article/details/4557512 (深入探讨SOAP、RPC和RMI)

http://www.blogjava.net/fanyingjie/archive/2011/09/24/359401.html (Java RPC通信机制之RMI,包括简单例子)

http://blog.csdn.net/arau_sh/article/details/6696178 (RPC,RMI,Web Services,JMS那点事)

面试题思考:Java RMI与RPC,JMS的比较的更多相关文章

  1. Java RMI与RPC的区别

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6542811.html  一:RPC 远程过程调用 RPC(Remote Procedure Call Prot ...

  2. Java自带RPC实现,RMI框架入门

    Java自带RPC实现,RMI框架入门 首先RMI(Remote Method Invocation)是Java特有的一种RPC实现,它能够使部署在不同主机上的Java对象进行通信与方法调用,它是一种 ...

  3. RPC和Socket,RMI和RPC之间的关系

    远程通信机制RPC与RMI的关系 http://blog.csdn.net/zolalad/article/details/25161133       1.RPC RPC(Remote Proced ...

  4. JAVA RMI例子

    RMI 是java语言的一个RPC框架,本文给出基础例子如下: 1.实现接口: public interface ICalc extends Remote { public int add(int p ...

  5. Java RMI 介绍和例子以及Spring对RMI支持的实际应用实例

    RMI 相关知识 RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网 ...

  6. Java学习笔记(十六)——Java RMI

    [前面的话] 最近过的好舒服,每天过的感觉很充实,一些生活和工作的技巧注意了就会发现,其实生活也是可以过的如此的有滋有味,满足现在的状况,并且感觉很幸福. 学习java RMI的原因是最近在使用dub ...

  7. 转 RMI、RPC、SOAP通信技术介绍及比对

    http://www.open-open.com/home/space.php?uid=37924&do=blog&id=8974 1.RMI 使用java的程序员,对于RMI(Rem ...

  8. RMI、RPC、SOAP通讯技术介绍及比对 - XML/SOAP

    RMI.RPC.SOAP通信技术介绍及比对 1.RMI 使用java的程序员,对于RMI(RemoteMethod Invoke,远程方法调用)一定不陌生,在java中,为了在分布式应用开发时,能够方 ...

  9. 面试题_ Java EE 相关的面试题

    为了做 Java EE 的朋友,这里列出了一些 web 开发的特定问题,你们可以用来准备 JEE 部分的面试: 10 大 Spring 框架面试题及答案(参见)10 个非常好的 XML 面试问题(Ja ...

随机推荐

  1. Zoie中文文档及简单解析

    https://linkedin.jira.com/wiki/pages/viewpage.action?pageId=4456480 一.总体架构 Zoie是一个实时的搜索引擎系统,其需要逻辑上独立 ...

  2. 帧率(FPS)计算的六种方法总结

    原文地址:http://blog.csdn.net/u012494876/article/details/53368164 帧率(FPS)计算是游戏编程中常见的一个话题.大体来说,总共有如下六种方法: ...

  3. Redis总结(四)Redis 的持久化(转载)

    前面已经总结了Redis 的安装和使用今天讲下Redis 的持久化. redis跟memcached类似,都是内存数据库,不过redis支持数据持久化,也就是说redis可以将内存中的数据同步到磁盘来 ...

  4. ref与out区别(ref有进有出,而out只出不进)

    ref与out区别(ref有进有出,而out只出不进)   C#基础:ref和out的区别 ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员更改参数的值 ...

  5. C#:依据目录填充树视图

    #region 依据目录填充树视图 /// <summary> /// 依据文件夹目录,填充树视图 /// </summary> /// <param name=&quo ...

  6. Linux两块4TB的数据磁盘创建8TB的Raid0

    分区表MBR与GPT的说明: MBR:主引导记录,是传统的分区机制,应用于绝大多数使用BIOS的PC设备,MBR+BIOS,MBR支持32位和64位系统,支持的分区数量有限,MBR只支持不超过2T的硬 ...

  7. 常见的安装包制作程序installer

    1. Windows安装程序制作工具 NSISNSIS (Nullsoft Scriptable Install System) 是一个专业开源的制作 windows 安装程序的工具.http://n ...

  8. Java常量池解析与字符串intern简介

    在Java应用程序运行时,Java虚拟机会保存一份内部的运行时常量池,它区别于class文件的常量池,是class文件常量池映射到虚拟机中的数据结构. 关于class文件常量池的部分可以参考之前的博文 ...

  9. jquery 修改 bootstrap模态框的宽度并且居中

    1.定义模态框 <div class="modal fade" id="Project_Cell_Modal" tabindex="-1&quo ...

  10. C语言 · 复数四则运算

    算法提高 6-17复数四则运算   时间限制:1.0s   内存限制:512.0MB      设计复数库,实现基本的复数加减乘除运算. 输入时只需分别键入实部和虚部,以空格分割,两个复数之间用运算符 ...