`

(转)远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)

    博客分类:
  • java
阅读更多

饮水不忘源头 转自:http://blog.csdn.net/shan9liang/article/details/8995023原帖

RPC(Remote Procedure Call Protocol)

RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果。这个请求包括一个参数集和一个文本集,通常形成“classname.methodname”形式。优点是跨语言跨平台,C端、S端有更大的独立性,缺点是不支持对象,无法在编译器检查错误,只能在运行期检查。

 

Web Service

Web Service提供的服务是基于web容器的,底层使用http协议,类似一个远程的服务提供者,比如天气预报服务,对各地客户端提供天气预报,是一种请求应答的机制,是跨系统跨平台的。就是通过一个servlet,提供服务出去。

 

首先客户端从服务器的到WebService的WSDL,同时在客户端声称一个代理类(Proxy Class) 这个代理类负责与WebService

服务器进行Request 和Response 当一个数据(XML格式的)被封装成SOAP格式的数据流发送到服务器端的时候,就会生成一个进程对象并且把接收到这个Request的SOAP包进行解析,然后对事物进行处理,处理结束以后再对这个计算结果进行SOAP

包装,然后把这个包作为一个Response发送给客户端的代理类(Proxy Class),同样地,这个代理类也对这个SOAP包进行解析处理,继而进行后续操作。这就是WebService的一个运行过程。

 

Web Service大体上分为5个层次:

 1. Http传输信道

 2. XML的数据格式

 3. SOAP封装格式

 4. WSDL的描述方式

 5. UDDI  UDDI是一种目录服务,企业可以使用它对Webservices进行注册和搜索

 

RMI (Remote Method Invocation)

RMI 采用stubs 和 skeletons 来进行远程对象(remote object)的通讯。stub 充当远程对象的客户端代理,有着和远程对象相同的远程接口,远程对象的调用实际是通过调用该对象的客户端代理对象stub来完成的,通过该机制RMI就好比它是本地工作,采用tcp/ip协议,客户端直接调用服务端上的一些方法。优点是强类型,编译期可检查错误,缺点是只能基于JAVA语言,客户机与服务器紧耦合。

 

JMS(Java Messaging Service)

JMS是Java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。JMS支持两种消息模型:Point-to-Point(P2P)和Publish/Subscribe(Pub/Sub),即点对点和发布订阅模型。

 

几者的区别与联系

 

1、RPC与RMI

 

(1)RPC 跨语言,而 RMI只支持Java。

(2)RMI 调用远程对象方法,允许方法返回 Java 对象以及基本数据类型,而RPC 不支持对象的概念,传送到 RPC 服务的消息由外部数据表示 (External Data Representation, XDR) 语言表示,这种语言抽象了字节序类和数据类型结构之间的差异。只有由 XDR 定义的数据类型才能被传递, 可以说 RMI 是面向对象方式的 Java RPC 。

(3)在方法调用上,RMI中,远程接口使每个远程方法都具有方法签名。如果一个方法在服务器上执行,但是没有相匹配的签名被添加到这个远程接口上,那么这个新方法就不能被RMI客户方所调用。

在RPC中,当一个请求到达RPC服务器时,这个请求就包含了一个参数集和一个文本值,通常形成“classname.methodname”的形式。这就向RPC服务器表明,被请求的方法在为 “classname”的类中,名叫“methodname”。然后RPC服务器就去搜索与之相匹配的类和方法,并把它作为那种方法参数类型的输入。这里的参数类型是与RPC请求中的类型是匹配的。一旦匹配成功,这个方法就被调用了,其结果被编码后返回客户方。

  

2、JMS和RMI

 

采用JMS 服务,对象是在物理上被异步从网络的某个JVM 上直接移动到另一个JVM 上(是消息通知机制)

而RMI 对象是绑定在本地JVM 中,只有函数参数和返回值是通过网络传送的(是请求应答机制)。

 

RMI一般都是同步的,也就是说,当client调用Server的一个方法的时候,需要等到对方的返回,才能继续执行client端,这个过程调用本地方法感觉上是一样的,这也是RMI的一个特点。

JMS 一般只是一个点发出一个Message到Message Server,发出之后一般不会关心谁用了这个message。

所以,一般RMI的应用是紧耦合,JMS的应用相对来说是松散耦合应用。

 

3、Webservice与RMI

 

RMI是在tcp协议上传递可序列化的java对象,只能用在java虚拟机上,绑定语言,客户端和服务端都必须是java

webservice没有这个限制,webservice是在http协议上传递xml文本文件,与语言和平台无关

 

4、Webservice与JMS

 

Webservice专注于远程服务调用,jms专注于信息交换。

 

大多数情况下Webservice是两系统间的直接交互(Consumer <--> Producer),而大多数情况下jms是三方系统交互(Consumer <- Broker -> Producer)。当然,JMS也可以实现request-response模式的通信,只要Consumer或Producer其中一方兼任broker即可。

 

JMS可以做到异步调用完全隔离了客户端和服务提供者,能够抵御流量洪峰; WebService服务通常为同步调用,需要有复杂的对象转换,相比SOAP,现在JSON,rest都是很好的http架构方案;(举一个例子,电子商务的分布式系统中,有支付系统和业务系统,支付系统负责用户付款,在用户在银行付款后需要通知各个业务系统,那么这个时候,既可以用同步也可以用异步,使用异步的好处就能抵御网站暂时的流量高峰,或者能应对慢消费者。)

 

JMS是java平台上的消息规范。一般jms消息不是一个xml,而是一个java对象,很明显,jms没考虑异构系统,说白了,JMS就没考虑非java的东西。但是好在现在大多数的jms provider(就是JMS的各种实现产品)都解决了异构问题。相比WebService的跨平台各有千秋吧。

分享到:
评论

相关推荐

    Java远程通讯可选技术及原理

    Java远程通讯技术是构建分布式系统的关键,涉及到多种技术如RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等。这些技术在不同的场景下有着各自的优势和适用范围,理解它们的工作原理对于优化系统性能至关重要。 ...

    分析师考试复习资料(精简整理版).

    - **过程调用**:RPC 是一种通用的远程过程调用机制,不限于特定的编程语言。 - **协议**:RPC 常使用特定的传输协议,如 TCP/IP。 - **中间件**:通常需要额外的中间件来支持不同语言之间的通信。 ### 知识点五:...

    最新系统分析师考试复习资料(精简整理版).pdf

    #### RMI和RPC的区别 - **RMI**:Java Remote Method Invocation,是Java平台上的远程过程调用,支持面向对象的服务。 - **RPC**:Remote Procedure Call,一种通用协议,支持多种语言间的远程过程调用。 - **主要...

    SOA通用架构.docx

    11. **通信协议和接口**:Webservice、RESTful API、Mq(消息队列)、JMS(Java消息服务)、Socket、远程对象(RPC/RMI)、OLAP(在线分析处理)、二进制/JSON/XML格式数据交换,以及HTTP(S)、SOAP、IIOP等协议用于...

    最新系统分析师考试复习资料

    - **RPC (Remote Procedure Call)**:是一种通用的远程过程调用协议,可以跨语言实现。 - **XML 和 HTML 的主要区别** - **目的不同**:XML 主要用于数据交换和存储,而 HTML 用于网页展示。 - **语法严格性**:...

    JAVA程序员您需要学习的25个标准

    10. **分布式对象与远程API**:掌握RMI(远程方法调用)和RMI/IIOP(Internet Inter-ORB Protocol),可以实现跨网络的分布式对象通信,是构建大型分布式系统的基石。 11. **中间件技术与JAVA集成**:了解Tuxedo、...

    成为Java高手的25个学习目标.doc

    10. **分布式对象和远程API**:掌握RMI(远程方法调用)和RMI/IIOP(Internet Inter-ORB协议),理解分布式系统的工作原理。 11. **中间件技术**:学习Tuxedo、CROBA等中间件,以及JavaEE(Java企业版)规范。 12....

    25个好习惯帮你快速成为JAVA高手

    10. **分布式对象与远程API**:理解RMI和RMI/IIOP等远程API,掌握分布式对象的处理方式。 11. **中间件技术与JavaEE**:熟悉Tuxedo,CORBA等中间件技术,以及JavaEE标准和其实现方式。 12. **XML API**:掌握至少...

    Java 高手速成方法

    理解并运用RMI(远程方法调用)和RMI/IIOP等分布式对象和远程API,对于构建分布式系统和微服务架构至关重要。 #### 9. 中间件技术与JavaEE 掌握Tuxedo、CORBA等中间件技术,以及JavaEE平台的深度集成,可以有效...

    Java高级工程师必学内容

    分布式对象和远程API(如RMI、RMI/IIOP)使Java程序能够跨网络通信。熟悉中间件技术标准,如Tuxedo、CORBA,以及Java EE规范,可以增强系统的可扩展性和可靠性。 #### XML处理与Web Services XML(Extensible ...

    金蝶BOSV6.1_业务组件API参考手册

    com.kingdee.bos.service.message.jms.grouptopic com.kingdee.bos.service.message.jms.queue com.kingdee.bos.service.message.jms.topic com.kingdee.bos.service.message.mail ...

    java程序员的标准

    - **WebService**:利用JAX-RPC、SAAJ、JAXB、JAXM等API和技术构建和消费WebService。 #### 十、轻量级应用程序框架 - **Spring Framework**:提供依赖注入、面向切面编程等功能,简化了Java EE应用的开发。 - **...

    SOA+SaaS在中国生存现状 不要混淆概念

    从技术角度来说,SOA涉及的技术实现手段包括但不限于WebService、RMI、Remoting、CORBA、JMS、MQ、JSP和SERVLET等。这些技术本身并不新鲜,但SOA的出现让它们有了全新的应用模式。实现SOA还需要遵循一系列的标准和...

Global site tag (gtag.js) - Google Analytics