分布式通信的幾種方式(EJB、RMI、RPC、JMS、web service雜談)

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

RPC(remote produce call)
RPC是遠程過程調用協(xié)議,它是基于C/S模型調用的機制,客戶機向服務器端發(fā)送調用請求等待服務器應答,是一種典型的請求應答機制,大致過程可以理解為本地分布式對象向本機發(fā)請求,不用自己編寫底層通信本機會通過網(wǎng)絡向服務器發(fā)送請求,服務器對象接受參數(shù)后,經過處理再把處理后的結果發(fā)送回客戶端。
它是早期的支持分布式一些,缺點rpc是面向過程的遠程調用,不支持面向對象,所以現(xiàn)在用的人就少了。
不支持異步調用
RMI(remote method invocation)
rmi也是遠程方法調用,似乎和RPC一樣都是調用遠程的方法,我們可以把RMI看作是用java語言實現(xiàn)了RPC協(xié)議,由于RPC不支持對象通信,這也是RMI比RPC的優(yōu)越之處,支持對象傳輸。
它遵循的不是SOAP協(xié)議,而是JRMP(java remote message protocol)轉為java對象所制定的一個協(xié)議,可以運行在任何用java語言寫的系統(tǒng)上,具有跨平臺特性,它不能跨語言。
既然用只支持java那么它也有了java對象的很多特性,如果垃圾回收、面向對象等。
RMI 采用stubs (客戶機)和 skeletons (框架)來進行遠程對象(remote object)的通訊。stub 充當遠程對象的客戶端代理,有著和遠程對象相同的遠程接口,遠程對象的調用實際是通過調用該對象的客戶端代理對象stub來完成的,效果和調用本地對象一樣。
傳輸?shù)臄?shù)據(jù)一般是java對象,而不是XML格式的數(shù)據(jù)。
優(yōu)點:支持分布式對象、跨平臺,stubs/skeletons機制;缺點:不能跨語言。
JMS(java remote service)
jms是在各個java類(包括ejb類)之間傳遞消息的中間件,好比給我們送信的郵遞員,在各個人之間收發(fā)信件。
支持兩種消息模型P2P和pub/stub,即點對點和發(fā)布訂閱模型。
傳輸?shù)氖且环N消息移植機制,將消息從一個客戶機移動到另一個終端。
優(yōu)點:支持異步通信、消息produce和recept松耦合。
EJB(enterprise java bean)
ejb是java EE 中的一個規(guī)范,該規(guī)范描述了分布式應用程序需要解決的問題,例如事務處理、安全、日志、分布式等,而同時呢,sun公司也實現(xiàn)了自己定義的這一個標準,相當于自己頒布一個標準然后,又給出了實現(xiàn)供別人使用,實現(xiàn)以很多API的方式提供給用的人。
ejb是按照java服務器接口定義的java類,可以理解為一個特殊的java類,放在容器里容器可以幫助該類管理事務、分布式、安全等,一般小的程序不會用到,只有大型分布式系統(tǒng)才會用到ejb,既然ejb是一個java類或是一個組件,顆粒較小,這也是與Webservice的區(qū)別之一,下面會說到,它就可以被其它一個或多個模塊調用。
包含了三種類型的Bean,可以通過注釋JPA一個規(guī)范來標記,其中有一種Bean,叫MDB消息驅動bean,它的通信機制涉及到了JMS協(xié)議。
ejb可以進行遠程調用,但是不能夠跨語言,ejb是同步調用,而平時我們說的的ejb異步調用指的是ejb的MDB異步通信。
Web Service
Web service是一種網(wǎng)絡間跨平臺、跨語言的分布式系統(tǒng)間通信的標準。傳輸?shù)臄?shù)據(jù)位XML、json等格式的數(shù)據(jù),應用范圍廣。
Web Service大體上分為5個層次:

  1. Http傳輸信道
  2. XML的數(shù)據(jù)格式
  3. SOAP封裝格式
  4. WSDL的描述方式
  5. UDDI UDDI是一種目錄服務,企業(yè)可以使用它對Webservices進行注冊和搜索

EJB與JMS的關系
它們其實是沒有多大關系的,它們都是java EE的規(guī)范,ejb的一種類MDB實現(xiàn)了JMS規(guī)范,當然是先JMS規(guī)范的不止有ejb的mdb,比如apache ActiveMQ也實現(xiàn)了JMS規(guī)范,我們平時用的是實現(xiàn)了JMS的產品,而不是JMS規(guī)范。

Web service與EJB
對這兩個常常有點迷惑人,因為他們都實現(xiàn)了分布式應用調用,雖然他們很相似但是還是有很多區(qū)別的,首先通信協(xié)議是不一樣的,ejb采用rmi-iiop協(xié)議,Web service利用http協(xié)議傳輸數(shù)據(jù),優(yōu)點常識的都知道http協(xié)議支持的較廣泛,從這點來看Web Service層次要高一些、俗話說站得高看得遠。
Webservice主要關注于解決異構系統(tǒng)、不同語言系統(tǒng)通信,其關注的是分布式服務開發(fā)、著手點要高、站的角度高,而ejb可以看做是分布式編程平臺,通過容器和組件,簡化了程序開發(fā)、調試和部署等它關注的是分布式組件開發(fā),粒度小。
Web service可以看做是異構系統(tǒng)、異構語言系統(tǒng)間通信的一個標準,而ejb只屬于J2EE規(guī)范的一部分。
ejb底層用rmi-iiop協(xié)議進行通信,防火墻會阻止;
web service是基于http協(xié)議進行通信,防火墻不會阻止。

SOA與Web Service
SOA是面向服務體系架構,是一種編程思想,SOA不是Web Service,WebService是目前最適合實現(xiàn)SOA的技術。
小結
這些通信標準或實現(xiàn)各有個的優(yōu)點和缺點,在實際使用中根據(jù)具體情況合理選擇。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容