分布式通信的几种方式(EJB、RMI、RPC、JMS、web service杂谈)

标签: 通信 ejb rmi | 发表时间:2014-03-12 14:48 | 作者:lilongsheng1125
分享到:
出处:http://blog.csdn.net

  • RPC(remote produce calL)
RPC是远程过程调用协议,它是基于C/S模型调用的机制,客户机向服务器端发送调用请求等待服务器应答,是一种典型的请求应答机制,大致过程可以理解为本地分布式对象向本机发请求,不用自己编写底层通信本机会通过网络向服务器发送请求,服务器对象接受参数后,经过处理再把处理后的结果发送回客户端。
它是早期的支持分布式一些,缺点rpc是面向过程的远程调用,不支持面向对象,所以现在用的人就少了。
不支持异步调用
  • RMI(remote method invocation)
rmi也是远程方法调用,似乎和RPC一样都是调用远程的方法,我们可以把RMI看作是用java语言实现了RPC协议,由于RPC不支持对象通信,这也是RMI比RPC的优越之处,支持对象传输。
它遵循的不是SOAP协议,而是JRMP(java remote message protocol)转为java对象所制定的一个协议,可以运行在任何用java语言写的系统上,具有跨平台特性,它不能跨语言。
既然用只支持java那么它也有了java对象的很多特性,如果垃圾回收、面向对象等。
RMI 采用stubs (客户机)和 skeletons (框架)来进行远程对象(remote object)的通讯。stub 充当远程对象的客户端代理,有着和远程对象相同的远程接口,远程对象的调用实际是通过调用该对象的客户端代理对象stub来完成的,效果和调用本地对象一样。
传输的数据一般是java对象,而不是XML格式的数据。
优点:支持分布式对象、跨平台,stubs/skeletons机制;缺点:不能跨语言。
  • JMS(java remote service)
jms是在各个java类(包括ejb类)之间传递消息的中间件,好比给我们送信的邮递员,在各个人之间收发信件。
支持两种消息模型P2P和pub/stub,即点对点和发布订阅模型。
传输的是一种消息移植机制,将消息从一个客户机移动到另一个终端。
优点:支持异步通信、消息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异步通信。
  • Web Service
Web service是一种网络间跨平台、跨语言的分布式系统间通信的标准。传输的数据位XML、json等格式的数据,应用范围广。
Web Service大体上分为5个层次:

1. Http传输信道
2. XML的数据格式
3. SOAP封装格式
4. WSDL的描述方式
5. UDDI  UDDI是一种目录服务,企业可以使用它对Webservices进行注册和搜索
  • EJB与JMS的关系
它们其实是没有多大关系的,它们都是java EE的规范,ejb的一种类MDB实现了JMS规范,当然是先JMS规范的不止有ejb的mdb,比如apache  ActiveMQ也实现了JMS规范,我们平时用的是实现了JMS的产品,而不是JMS规范。
  • Web service与EJB
对这两个常常有点迷惑人,因为他们都实现了分布式应用调用,虽然他们很相似但是还是有很多区别的,首先通信协议是不一样的,ejb采用rmi-iiop协议,Web service利用http协议传输数据,优点常识的都知道http协议支持的较广泛,从这点来看Web Service层次要高一些、俗话说站得高看得远。
Webservice主要关注于解决异构系统、不同语言系统通信,其关注的是分布式服务开发、着手点要高、站的角度高,而ejb可以看做是分布式编程平台,通过容器和组件,简化了程序开发、调试和部署等它关注的是分布式组件开发,粒度小。
 Web service可以看做是异构系统、异构语言系统间通信的一个标准,而ejb只属于J2EE规范的一部分。
ejb底层用rmi-iiop协议进行通信,防火墙会阻止;web service是基于http协议进行通信,防火墙不会阻止。
  • SOA与Web Service
SOA是面向服务体系架构,是一种编程思想,SOA不是Web Service,WebService是目前最适合实现SOA的技术。
  • 小结
这些通信标准或实现各有个的优点和缺点,在实际使用中根据具体情况合理选择。
作者:lilongsheng1125 发表于2014-3-12 14:48:33 原文链接
阅读:122 评论:0 查看评论

相关 [通信 ejb rmi] 推荐:

分布式通信的几种方式(EJB、RMI、RPC、JMS、web service杂谈)

- - CSDN博客互联网推荐文章
RPC是远程过程调用协议,它是基于C/S模型调用的机制,客户机向服务器端发送调用请求等待服务器应答,是一种典型的请求应答机制,大致过程可以理解为本地分布式对象向本机发请求,不用自己编写底层通信本机会通过网络向服务器发送请求,服务器对象接受参数后,经过处理再把处理后的结果发送回客户端. 它是早期的支持分布式一些,缺点rpc是面向过程的远程调用,不支持面向对象,所以现在用的人就少了.

Spring Rmi配置

- - 企业架构 - ITeye博客
现在远程调用一般用RPC,webservice或者Rmi,而目前用的比较多的是webservice和Rmi. webservice和rmi的最主要的区别,rmi的客户端和服务端都必须是java,webservice没有这个限制,webservice是在http协议上传递xml文本文件. 与语言和平台无关,rmi是在tcp协议上传递可序列化的java对象,只能用在java虚拟机上,绑定语言.

为啥要用EJB

- - 企业架构 - ITeye博客
首先,我们必须明确,为什么要使用J2EE. 使用J2EE的主要原因是多层结构,传统的两层C/S结构难于维护,稳定性极差,界面代码和数据库代码混淆在一起,牵一动百,多层结构使得界面和数据库完全分离,并且诞生了中间件这样的技术,如下图:. Web+EJB能组成真正的多层结构.   为什么使用EJB我原先认为这不是一个讨论的话题,因为EJB是J2EE重要的组成部分,可以说没有EJB的J2EE只是一种Web系统,这样的系统非常容易丧失了多层结构的大部分优点(仔细想想那些混合多种层次功能JavaBeans和传统两层结构有什么区别.

为什么要使用EJB

- - CSDN博客架构设计推荐文章
多层结构是J2EE的优势所在. 开始进行J2EE学习,感触最深的莫过于分层了,ssh在分层,ejb还是在分层. 使用J2EE的主要原因就是多层结构,传统的两层C/S结构难于维护,稳定性极差,界面代码和数据库代码混淆在一起,牵一动百,多层结构使得界面和数据库完全分离,并且诞生了中间件这样的技术,如下图.

Spring整合Rmi总结

- - CSDN博客架构设计推荐文章
服务端使用了org.springframework.remoting.rmi.RmiServiceExporter. RmiServiceExporter把任何Spring管理的Bean输出成一个RMI服务. 通过把Bean包装在一个适配器类中工作. 适配器类被绑定到RMI注册表中,并且将请求代理给服务类.

图解EJB的体系结构

- - 企业架构 - ITeye博客
本文对EJB的体系结构作一个全面介绍:. EJB在J2EE体系结构中的位置. EJB是Enterprise JavaBeans的简称. 本文对EJB技术的体系结构作一个全面深入地介绍. EJB在J2EE体系结构中的位置. 视图层或表现层:提供用户界面;接收用户输入;数据输出. WEB应用的情况,JSP以及SERVLET属于视图层组件.

RMI与JNDI集成服务实例

- - 编程语言 - ITeye博客
     下午和莉莉讨论JNDI,感觉网上好多资料都写到太过于高深莫测了,具体了解了之后,发现JNDI的使用目的,最根本的就是java应用通过一个名字获取其他JVM中的数据. 而在提供JNDI服务的服务端应用中,建立了一个类似键值对的形式,存储JNDI的名字和数据的绑定. 这就类似于数据库的连接池,不必每次去连接数据库都重新建立一个连接,而是直接从连接池中获取已有连接拿来使用即可,节省了内存同时也优化了效率.

使用 RMI + ZooKeeper 实现远程调用框架

- - zzm
1.1 定义一个 RMI 接口. 1.2 编写 RMI 接口的实现类. 1.3 通过 JNDI 发布 RMI 服务. 4 使用 ZooKeeper 提供高可用的 RMI 服务. 在 Java 世界里,有一种技术可以实现“跨虚拟机”的调用,它就是 . RMI(Remote Method Invocation,远程方法调用).

JavaScript之web通信

- - Web前端 - ITeye博客
浏览器作为 Web 应用的前台,自身的处理功能比较有限. 浏览器的发展需要客户端升级软件,同时由于客户端浏览器软件的多样性,在某种意义上,也影响了浏览器新技术的推广. 在 Web 应用中,浏览器的主要工作是发送请求、解析服务器返回的信息以不同的风格显示. AJAX 是浏览器技术发展的成果,通过在浏览器端发送异步请求,提高了单用户操作的响应性.

HTML5 web通信(跨文档通信/通道通信)简介

- - 张鑫旭-鑫空间-鑫生活
本文地址: http://www.zhangxinxu.com/wordpress/?p=2229. web通信(洋名:web messaging)是一种文档中独立的浏览上下文间的DOM不会被恶意的跨域脚本暴露数据分享方式. 得得得,术语啊什么的,比看到凤姐还头疼. web通信是一种数据分享方式(有屁话之嫌);.