`
wang9907
  • 浏览: 9796 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

(转)远程通信(RPC,Webservice,RMI,JMS、EJB、JNDI的区别)对比

    博客分类:
  • java
阅读更多

转载出http://blog.csdn.net/lishehe/article/details/46654499

总结这些概念都是易混淆,最基本概念定义复习和深入理解,同时也是架构师必备课程

 

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语言,客户机与服务器紧耦合;

JRMP是Java持有的,基于流的协议,完成一个对象的Java到Java的远程调用;IIOP是CORBA对象请求代理之间交流的协议,Java中使得程序可以和其他语言的CORBA实现互操作性的协议,和JRMP互补。

优点:支持分布式对象、跨平台,stubs/skeletons机制;缺点:不能跨语言

 

JMS(Java Messaging Service)

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

优点:支持异步通信、消息produce和recept松耦合

 

EJB(enterprise java bean)

ejb是java EE 中的一个规范,该规范描述了分布式应用程序需要解决的问题,例如事务处理、安全、日志、分布

式等,而同时呢,sun公司也实现了自己定义的这一个标准,相当于自己颁布一个标准然后,又给出了实现供别人使

用,实现以很多API的方式提供给用的人。
ejb是按照java服务器接口定义的java类,可以理解为一个特殊的java类,放在容器里容器可以帮助该类管理事务

、分布式、安全等,一般小的程序不会用到,只有大型分布式系统才会用到ejb,既然ejb是一个java类或是一个组件

,颗粒较小,这也是与Webservice的区别之一,下面会说到,它就可以被其它一个或多个模块调用。
包含了三种类型的Bean,可以通过注释JPA一个规范来标记,其中有一种Bean,叫MDB消息驱动bean,它的通信机制

涉及到了JMS协议。
ejb可以进行远程调用,但是不能够跨语言,ejb是同步调用,而平时我们说的的ejb异步调用指的是ejb的MDB异

步通信。

 

JNDI(Java naming and Directory Interface)

 

Java命名与目录接口,包含两个服务,命名服务奖名称和对象联系起来,使得我们可以用名称访问对象,目录服务是一种命名

服务,在这种服务里,对象不但有名称,还有属性。

        使用JNDI,一个J2EE应用程序可以存储和动态获取任何类型的命名Java对象。因为JNDI不依赖于任何特定的执行,应用程序可

以使用JNDI访问各种命名目录服务,包括现有的诸如LDAP、NDS、DNS、NIS、COS命名和RMI注册等服务。这使得J2EE应用程

序可以和传统的应用程序和系统共存。

 


 

 从JNDI的架构中可以看出,JNDI分为三部分,应用程序编程接口(API)和服务供应商接口(SPI),前者Java应用程序访问各

种命名和目录服务,开发上层应用的程序员就不必去关心底层具体的技术细节,后者则是设计来供任意一种服务的供应商(也包括

目录服务供应商)使用,这一层一般由供应商去完成。

 

 

对比学习

 

EJB与JMS的关系

它们其实是没有多大关系的,它们都是java EE的规范,ejb的一种类MDB实现了JMS规范,当然是先JMS规范的

不止有ejb的mdb,比如apache  ActiveMQ也是

 

Web service与EJB

对这两个常常有点迷惑人,因为他们都实现了分布式应用调用,虽然他们很相似但是还是有很多区别的,首先通

信协议是不一样的,ejb采用rmi-iiop协议,Web service利用http协议传输数据,优点常识的都知道http协议支持的较广

泛,从这点来看Web Service层次要高一些、俗话说站得高看得远。


Webservice主要关注于解决异构系统、不同语言系统通信,其关注的是分布式服务开发、着手点要高、站的角度高,

而ejb可以看做是分布式编程平台,通过容器和组件,简化了程序开发、调试和部署等它关注的是分布式组件开发,粒

度小。
 Web service可以看做是异构系统、异构语言系统间通信的一个标准,而ejb只属于J2EE规范的一部分。
ejb底层用rmi-iiop协议进行通信,防火墙会阻止;web service是基于http协议进行通信,防火墙不会阻止。

几者的区别与联系

 

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请求中的类型是匹配的。一旦匹配成功,这个方法就被调用了,其结果被编码后返回客户方。

  

JMS和RMI

 

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

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

 

RMI一般都是同步的,也就是说,当client调用Server的一个方法的时候,需要等到对方的返回,才能继续执行

client端,这个过程调用本地方法感觉上是一样的,这也是RMI的一个特点。

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

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

 

 

 

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的跨平台各有千秋吧。

 

RMI与JNDI

RMI是一个能够建立一个N层应用,扩展中间层,将属于不同应用的分布对象包容起来,使用跨过中间层来共享

数据和逻辑,能真正实现分布式的解决方案。通过它能够在运行时,通过网络发现不同机器的服务程序,并对应用间

的通信进行管理,能确保像本地一样使用远程对象。在RMI中使用rmiregistry时存在一定的问题,rmiregistry只是用作

测试基于RMI的应用程序的一种方法,当停止并重新启动rmiregistry时,需要中心注册其中的所有对象,针对这种情

况,一般会使用JNDI为远程对象使用一个命名和目录服务,使用LDAP来保存远程对象。RMI只是一种远程对象访问

的接口规范,遵循此规范的对象可被远程访问,但是要使用rmi的服务注册程序注册之后才能够被远程调用。JNDi是

Java命名和目录服务访问接口,通过JNDI,可以访问已经在命名和目录服务器中注册的服务对象,因此,可以把rmi

对象注册在Ldap命名目录服务器中,然后使用JNDI对远程对象进行访问和调用

 

       各个对象都有侧重点,作为架构师(技术选型)、性能优化都需要基本知识给予强大的理论支持,各有千秋,充

分结合项目的实际情况做出选择。

 

分享到:
评论

相关推荐

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

    ### 知识点四:RMI与RPC的区别 #### RMI (Remote Method Invocation) - **面向对象**:RMI 是基于 Java 的面向对象的远程过程调用机制。 - **透明性**:客户端调用远程对象的方法就像调用本地对象一样。 - **安全性...

    java中间件

    EJB与JavaBean的主要区别在于EJB提供更高级别的服务,如事务管理、安全性和并发控制。会话Bean有有状态和无状态之分,前者保留了用户会话信息,后者不保存。 11. **JNDI**:JNDI(Java Naming and Directory ...

    JBOSS端口配置

    &lt;mbean code="org.jboss.web.WebService" name="jboss:service=WebService"&gt; &lt;attribute name="Port"&gt;8083 ``` - **说明**:上述代码片段设置了Web服务的端口为8083。这意味着所有的Web服务将通过该端口进行...

    J2EE面试题希望对你有帮助

    - **JMS**:Java消息服务,实现应用程序间的通信,支持点对点和发布订阅模式。 - **JTA**:Java事务API,提供分布式事务服务,简化事务处理。 - **JAF**:Java认证框架,提供安全控制框架,便于实现个性化安全策略。...

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

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

    javaee 经典面试题集锦

    - **JMS**:Java消息服务,实现应用程序间的异步通信。 - **JTA**:Java事务API,提供分布式事务处理能力。 - **JAF**:Java动作框架,提供安全认证和授权功能。 - **RMI**:远程方法调用,使本地对象可以调用...

    java的各种技术.pdf

    8. **Web服务(WebService)**:基于XML和SOAP的跨平台通信,EJB通过WebService暴露给不同语言的应用调用。 9. **JMX(Java Management Extensions)**:用于管理和监控Java应用和系统的框架。 10. **JCA(Java ...

    java笔试题大全最新版

    - **提供的服务**:J2EE平台提供了包括JDBC、JNDI、RMI、JMS、EJB、JTA等在内的多种服务和技术,支持企业级应用开发。 #### 三、Struts框架介绍 Struts是一个基于Java Servlet/JavaServer Pages技术的开源Web应用...

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

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

    j2ee面试题

    - **JNDI** (Java Naming & Directory Interface): 提供目录服务和命名服务,使得应用程序能够查找和定位远程对象。 - **JMS** (Java Message Service): 提供消息传递机制,支持异步通信模式。 - **JTA** (Java ...

    J2EE面试题集锦

    - EJB基于JNDI、RMI和JTA等技术实现。 - 包括Session Bean、Entity Bean和Message Driven Bean三种类型。 2. **Session Bean与Entity Bean的区别** - **Session Bean**: 完成服务器端的业务逻辑操作,如数据库...

    java面试题

    - **RMI**:远程方法调用,实现对象间的远程通信。 #### 7. EJB(Enterprise JavaBeans)架构 - **Session Bean**:处理业务逻辑,分为有状态和无状态。 - **Entity Bean**:代表持久化数据,用于数据库交互。 - *...

    项目间的数据交互方式

    如果同为 Java 系统可用 JNDI 方式,EJB 也是一种方式。 5. 远程 URL 地址方式 远程 URL 地址方式是项目之间进行数据交互的一种方式。这种方式在互联网上用得很多,比如:Facebook、豆瓣的 API、支付宝在线支持...

    Java高级工程师必学内容

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

    j2ee面试题答案

    - **平台**:J2EE不仅是一组标准,也包括一系列的服务和支持技术,如JDBC、JNDI、RMI、JMS、EJB、JTA等,构成了一个完整的开发平台。 - **框架**:J2EE提供了一个丰富的框架,支持各种类型的组件和服务,从而实现...

    Java 高手速成方法

    熟悉JNDI、JMS、JTA/JTS、JMX和JavaMail等J2EE企业级技术,以及EJB组件模式(如Stateless/Stateful Session Beans、Entity Beans、Message-Driven Beans),对于构建复杂的企业级应用至关重要。 #### 13. J2EE应用...

Global site tag (gtag.js) - Google Analytics