http://blog.csdn.net/jiaolong724/article/details/21089347
RPC(remote produce call)
RPC是遠(yuǎn)程過程調(diào)用協(xié)議垄潮,它是基于C/S模型調(diào)用的機(jī)制,客戶機(jī)向服務(wù)器端發(fā)送調(diào)用請求等待服務(wù)器應(yīng)答闷盔,是一種典型的請求應(yīng)答機(jī)制弯洗,大致過程可以理解為本地分布式對象向本機(jī)發(fā)請求,不用自己編寫底層通信本機(jī)會通過網(wǎng)絡(luò)向服務(wù)器發(fā)送請求逢勾,服務(wù)器對象接受參數(shù)后牡整,經(jīng)過處理再把處理后的結(jié)果發(fā)送回客戶端。
它是早期的支持分布式一些溺拱,缺點rpc是面向過程的遠(yuǎn)程調(diào)用逃贝,不支持面向?qū)ο螅袁F(xiàn)在用的人就少了迫摔。
不支持異步調(diào)用
RMI(remote method invocation)
rmi也是遠(yuǎn)程方法調(diào)用沐扳,似乎和RPC一樣都是調(diào)用遠(yuǎn)程的方法,我們可以把RMI看作是用java語言實現(xiàn)了RPC協(xié)議句占,由于RPC不支持對象通信沪摄,這也是RMI比RPC的優(yōu)越之處,支持對象傳輸纱烘。
它遵循的不是SOAP協(xié)議杨拐,而是JRMP(java remote message protocol)轉(zhuǎn)為java對象所制定的一個協(xié)議,可以運行在任何用java語言寫的系統(tǒng)上擂啥,具有跨平臺特性哄陶,它不能跨語言。
既然用只支持java那么它也有了java對象的很多特性哺壶,如果垃圾回收奕筐、面向?qū)ο蟮取?br>
RMI 采用stubs (客戶機(jī))和 skeletons (框架)來進(jìn)行遠(yuǎn)程對象(remote object)的通訊。stub 充當(dāng)遠(yuǎn)程對象的客戶端代理变骡,有著和遠(yuǎn)程對象相同的遠(yuǎn)程接口,遠(yuǎn)程對象的調(diào)用實際是通過調(diào)用該對象的客戶端代理對象stub來完成的芭逝,效果和調(diào)用本地對象一樣塌碌。
傳輸?shù)臄?shù)據(jù)一般是java對象,而不是XML格式的數(shù)據(jù)旬盯。
優(yōu)點:支持分布式對象台妆、跨平臺翎猛,stubs/skeletons機(jī)制;缺點:不能跨語言接剩。
JMS(java remote service)
jms是在各個java類(包括ejb類)之間傳遞消息的中間件切厘,好比給我們送信的郵遞員,在各個人之間收發(fā)信件懊缺。
支持兩種消息模型P2P和pub/stub疫稿,即點對點和發(fā)布訂閱模型。
傳輸?shù)氖且环N消息移植機(jī)制鹃两,將消息從一個客戶機(jī)移動到另一個終端遗座。
優(yōu)點:支持異步通信、消息produce和recept松耦合俊扳。
EJB(enterprise java bean)
ejb是java EE 中的一個規(guī)范途蒋,該規(guī)范描述了分布式應(yīng)用程序需要解決的問題,例如事務(wù)處理馋记、安全号坡、日志、分布式等梯醒,而同時呢宽堆,sun公司也實現(xiàn)了自己定義的這一個標(biāo)準(zhǔn),相當(dāng)于自己頒布一個標(biāo)準(zhǔn)然后冤馏,又給出了實現(xiàn)供別人使用日麸,實現(xiàn)以很多API的方式提供給用的人。
ejb是按照java服務(wù)器接口定義的java類逮光,可以理解為一個特殊的java類代箭,放在容器里容器可以幫助該類管理事務(wù)、分布式涕刚、安全等嗡综,一般小的程序不會用到,只有大型分布式系統(tǒng)才會用到ejb杜漠,既然ejb是一個java類或是一個組件极景,顆粒較小,這也是與Webservice的區(qū)別之一驾茴,下面會說到盼樟,它就可以被其它一個或多個模塊調(diào)用。
包含了三種類型的Bean锈至,可以通過注釋JPA一個規(guī)范來標(biāo)記,其中有一種Bean晨缴,叫MDB消息驅(qū)動bean,它的通信機(jī)制涉及到了JMS協(xié)議峡捡。
ejb可以進(jìn)行遠(yuǎn)程調(diào)用击碗,但是不能夠跨語言筑悴,ejb是同步調(diào)用,而平時我們說的的ejb異步調(diào)用指的是ejb的MDB異步通信稍途。
Web Service
Web service是一種網(wǎng)絡(luò)間跨平臺阁吝、跨語言的分布式系統(tǒng)間通信的標(biāo)準(zhǔn)。傳輸?shù)臄?shù)據(jù)位XML械拍、json等格式的數(shù)據(jù)突勇,應(yīng)用范圍廣。
Web Service大體上分為5個層次:
- Http傳輸信道
- XML的數(shù)據(jù)格式
- SOAP封裝格式
- WSDL的描述方式
- UDDI UDDI是一種目錄服務(wù)殊者,企業(yè)可以使用它對Webservices進(jìn)行注冊和搜索
EJB與JMS的關(guān)系
它們其實是沒有多大關(guān)系的与境,它們都是java EE的規(guī)范,ejb的一種類MDB實現(xiàn)了JMS規(guī)范猖吴,當(dāng)然是先JMS規(guī)范的不止有ejb的mdb摔刁,比如apache ActiveMQ也實現(xiàn)了JMS規(guī)范,我們平時用的是實現(xiàn)了JMS的產(chǎn)品海蔽,而不是JMS規(guī)范共屈。
Web service與EJB
對這兩個常常有點迷惑人,因為他們都實現(xiàn)了分布式應(yīng)用調(diào)用党窜,雖然他們很相似但是還是有很多區(qū)別的拗引,首先通信協(xié)議是不一樣的,ejb采用rmi-iiop協(xié)議幌衣,Web service利用http協(xié)議傳輸數(shù)據(jù)矾削,優(yōu)點常識的都知道http協(xié)議支持的較廣泛,從這點來看Web Service層次要高一些豁护、俗話說站得高看得遠(yuǎn)哼凯。
Webservice主要關(guān)注于解決異構(gòu)系統(tǒng)、不同語言系統(tǒng)通信楚里,其關(guān)注的是分布式服務(wù)開發(fā)断部、著手點要高、站的角度高班缎,而ejb可以看做是分布式編程平臺蝴光,通過容器和組件,簡化了程序開發(fā)达址、調(diào)試和部署等它關(guān)注的是分布式組件開發(fā)蔑祟,粒度小。
Web service可以看做是異構(gòu)系統(tǒng)沉唠、異構(gòu)語言系統(tǒng)間通信的一個標(biāo)準(zhǔn)做瞪,而ejb只屬于J2EE規(guī)范的一部分。
ejb底層用rmi-iiop協(xié)議進(jìn)行通信,防火墻會阻止装蓬;
web service是基于http協(xié)議進(jìn)行通信,防火墻不會阻止纱扭。
SOA與Web Service
SOA是面向服務(wù)體系架構(gòu)牍帚,是一種編程思想,SOA不是Web Service乳蛾,WebService是目前最適合實現(xiàn)SOA的技術(shù)暗赶。
小結(jié)
這些通信標(biāo)準(zhǔn)或?qū)崿F(xiàn)各有個的優(yōu)點和缺點,在實際使用中根據(jù)具體情況合理選擇肃叶。