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

http://blog.csdn.net/jiaolong724/article/details/21089347

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的技术。 小结 这些通信标准或实现各有个的优点和缺点,在实际使用中根据具体情况合理选择。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏烂笔头

在Python应用中使用MongoDB

目录[-] Python是开发社区中用于许多不同类型应用的强大编程语言。很多人都知道它是可以处理几乎任何任务的灵活语言。因此,在Python应用中需要一个...

45340
来自专栏Linyb极客之路

分布式系统唯一ID生成方案汇总

系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结。生成ID的方法有很多,适应不同的场景、需求以及性能要求。所以有些比较复杂的系统会...

28820
来自专栏Albert陈凯

2018-08-05 3W+字长文深度总结|程序员面试题精华版集合(内附思维导图)!Java Web学习路径Java编程所需的工具及知识JVM的基本结构SSH框架设计模式之间的关系

原文地址:https://juejin.im/entry/5b6259036fb9a04fa42fce3c

15310
来自专栏GopherCoder

『Beego + Swagger 快速上手』

26430
来自专栏FreeBuf

从最近的微信支付看XXE漏洞

先说下写这篇文章的初衷吧,最近微信支付java_sdk刚爆发了一次xxe漏洞,然后领导赶快用自家的静态代码审计工具做了审计(这里我就不报名字,本来可以帮公司推广...

29330
来自专栏北京马哥教育

图解OS和Linux的基础知识

“试着尽量用图示来表示个人对内容的理解,不足之处,还望不吝指教。” 一. CPU 1. cpu与指令集 CPU分为运算器和控制器 CPU指令 特权指令 拥有管...

31930
来自专栏阮一峰的网络日志

使用 Make 构建网站

网站开发正变得越来越专业,涉及到各种各样的工具和流程,迫切需要构建自动化。 所谓"构建自动化",就是指使用构建工具,自动实现"从源码到网页"的开发流程。这有利于...

25440
来自专栏jeremy的技术点滴

dubbo起步

44360
来自专栏向治洪

找不到BufferedImage这个Class的解决方法

找不到BufferedImage这个Class的解决方法 环境:       [1]RedHat AS5 64位       [2]WebSphere6.0 3...

22080
来自专栏酷玩时刻

微信公众号开发之模板消息

其实这个问题很简单,在【微信公众平台】现在已经可以直接查看自己的公众号都能使用那些接口。

42530

扫码关注云+社区

领取腾讯云代金券