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. ie,cookie,域名与下划线

    前几天为了开发方便,和一个同事将XX.qq.com的测试站点拆成两个站点,我那个叫XX_hanks.qq.com,进行功能开发,在调试 cookie功能的时候,发现IE下cookie没有记住,用htt ...

  2. 红米Note4X开发者选项

    1.打开,设置->我的设备->全部参数 2.看到“MIUI版本”连点7次,在点击的过程中下部会有提示“在点X次就进入开发者模式”. 3.完成2步后,再次打开,设置->更多设置(系统和 ...

  3. 关于搭配junit 和JUnit报initializationError的解决方法

    关于junit是什么就不复述了,网上有 junit的source code是可以下载的,各个版本都有 地址:https://github.com/junit-team 通过junit 的source ...

  4. VBOX Ubuntu设置与Windows的共享文件夹

    参考资料: http://jingyan.baidu.com/article/2fb0ba40541a5900f2ec5f07.html http://zycao.com/virtualbox-ubu ...

  5. xadmin 安装详解

    1.安装必要的包 django>=1.9.0 django-crispy-forms>=1.6.0 django-import-export>=0.5.1 django-revers ...

  6. django中ModelForm save方法 以及快速生成空表单或包含数据的表单 包含错误信息

    django中ModelForm学习系列一~save方法 Model代码 from django.db import models # Create your models here. class P ...

  7. matlab_legend_使用

    matlab legend 使用 用Matlab画图时,有时候需要对各种图标进行标注,例如,用“+”代表A的运动情况,“*”代表B的 运动情况.legend函数的基本用法是LEGEND(string1 ...

  8. SQL查询优化联合索引 与 单一列的索引

    目前WEB的普及太快,在实际的开发中,一旦遇到大数据量的时候就需要做到优化,让查询的更快,才能给客户更好的体验,也能够在程序上避免timeout. 部分转载自:https://www.cnblogs. ...

  9. LeetCode -- 推断链表中是否有环

    思路: 使用两个节点.slow和fast,分别行进1步和2步.假设有相交的情况,slow和fast必定相遇:假设没有相交的情况,那么slow或fast必定有一个为null 相遇时有两种可能:1. 仅仅 ...

  10. 如何测试是否安装了web服务器

    windows默认没有安装web服务器,我们可以安装IIS. 我们安装个tomacte服务器,开发web程序必须的!!如果测试后出现这个页面说明安装成功le ! 我们这个安装的是本地服务器,可以把we ...