- 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ù)具體情況合理選擇拢操。