??? XFire、Axis
??? XFire、Axis是Webservice的實(shí)現(xiàn)框架,WebService可算是一個(gè)完整的SOA架構(gòu)實(shí)現(xiàn)標(biāo)準(zhǔn)了,因此采用XFire、Axis這些也就意味著是采用webservice方式了。
1、是基于什么協(xié)議實(shí)現(xiàn)的?
基于SOAP協(xié)議。
2、怎么發(fā)起請(qǐng)求?
獲取到遠(yuǎn)端service的proxy后直接調(diào)用。
3、怎么將請(qǐng)求轉(zhuǎn)化為符合協(xié)議的格式的?
將請(qǐng)求信息轉(zhuǎn)化為遵循SOAP協(xié)議的XML格式,由框架轉(zhuǎn)化為流進(jìn)行傳輸。
4、使用什么傳輸協(xié)議傳輸?
Http協(xié)議。
5、響應(yīng)端基于什么機(jī)制來(lái)接收請(qǐng)求?
監(jiān)聽(tīng)Http請(qǐng)求。
6、怎么將流還原為傳輸格式的?
根據(jù)SOAP協(xié)議進(jìn)行還原。
7、處理完畢后怎么回應(yīng)?
返回結(jié)果寫入XML中,由框架返回至調(diào)用端。
------------------------------------------------------------------------------------------------------------------------------
ActiveMQ
ActiveMQ是JMS的實(shí)現(xiàn),基于JMS這類消息機(jī)制實(shí)現(xiàn)遠(yuǎn)程通訊是一種不錯(cuò)的選擇,畢竟消息機(jī)制本身的功能使得基于它可以很容易的去實(shí)現(xiàn)同步/異步/單向調(diào)用等,而且消息機(jī)制從容錯(cuò)角度上來(lái)說(shuō)也是個(gè)不錯(cuò)的選擇,這是Erlang能夠做到容錯(cuò)的重要基礎(chǔ)。
1、是基于什么協(xié)議實(shí)現(xiàn)的?
基于JMS協(xié)議。
2、怎么發(fā)起請(qǐng)求?
遵循JMS API發(fā)起請(qǐng)求。
3、怎么將請(qǐng)求轉(zhuǎn)化為符合協(xié)議的格式的?
不太清楚,猜想應(yīng)該是二進(jìn)制流。
4、使用什么傳輸協(xié)議傳輸?
支持多種傳輸協(xié)議,例如tcp/ip、udp、http等等。
5、響應(yīng)端基于什么機(jī)制來(lái)接收請(qǐng)求?
監(jiān)聽(tīng)符合協(xié)議的端口。
6、怎么將流還原為傳輸格式的?
同問(wèn)題3。
7、處理完畢后怎么回應(yīng)?
遵循JMS API生成消息,并寫入JMS Queue中。
基于JMS此類機(jī)制實(shí)現(xiàn)遠(yuǎn)程通訊的例子有Spring-Intergration、Mule、Lingo等等。
-----------------------------------------------------------------------------------------------------------------------------
??? Mina
??? Mina是Apache提供的通訊框架,在之前一直沒(méi)有提到網(wǎng)絡(luò)IO這塊,之前提及的框架或library基本都是基于BIO的,而Mina是采用NIO的,NIO在并發(fā)量增長(zhǎng)時(shí)對(duì)比BIO而言會(huì)有明顯的性能提升,而java性能的提升,與其NIO這塊與OS的緊密結(jié)合是有不小的關(guān)系的。
??? 1、是基于什么協(xié)議實(shí)現(xiàn)的?
??? 可選的傳輸協(xié)議+NIO.
??? 2、怎么發(fā)起請(qǐng)求?
??? 通過(guò)Mina提供的Client API.
??? 3、怎么將請(qǐng)求轉(zhuǎn)化為符合協(xié)議的格式的?
??? Mina遵循java串行化機(jī)制對(duì)請(qǐng)求對(duì)象進(jìn)行序列化。
??? 4、使用什么傳輸協(xié)議傳輸?
??? 支持多種傳輸協(xié)議,例如tcp/ip、http等等。
??? 5、響應(yīng)端基于什么機(jī)制來(lái)接收請(qǐng)求?
??? 以NIO的方式監(jiān)聽(tīng)協(xié)議端口。
??? 6、怎么將流還原為傳輸格式的?
??? 遵循java串行化機(jī)制對(duì)請(qǐng)求對(duì)象進(jìn)行反序列化。
??? 7、處理完畢后怎么回應(yīng)?
??? 遵循Mina API進(jìn)行返回。
??? MINA是NIO方式的,因此支持異步調(diào)用是毫無(wú)懸念的。
--------------------------------------------------------------------------------------------------------------------------------
??? EJB
??? EJB最突出的在于其分布式,EJB采用的是ORMI協(xié)議,和RMI協(xié)議是差不多的,但EJB在分布式通訊的安全控制、transport pool、smart proxy等方面的突出使得其在分布式領(lǐng)域是不可忽視的力量。
??? 1、是基于什么協(xié)議實(shí)現(xiàn)的?
??? 基于ORMI協(xié)議。
??? 2、怎么發(fā)起請(qǐng)求?
??? EJB調(diào)用。
??? 3、怎么將請(qǐng)求轉(zhuǎn)化為符合協(xié)議的格式的?
??? 遵循java串行化機(jī)制對(duì)請(qǐng)求對(duì)象進(jìn)行序列化。
??? 4、使用什么傳輸協(xié)議傳輸?
??? tcp/ip.
??? 5、響應(yīng)端基于什么機(jī)制來(lái)接收請(qǐng)求?
??? 監(jiān)聽(tīng)協(xié)議端口。
??? 6、怎么將流還原為傳輸格式的?
??? 遵循java串行化機(jī)制對(duì)請(qǐng)求對(duì)象進(jìn)行反序列化。
??? 7、處理完畢后怎么回應(yīng)?
??? 直接返回處理對(duì)象即可。
??? 在之前的分布式服務(wù)框架系列的文章中對(duì)于jndi有誤導(dǎo)的嫌疑,在這篇blog中也順帶的提下jndi的機(jī)制,由于JNDI取決于具體的實(shí)現(xiàn),在這里只能是講解下jboss的jndi的實(shí)現(xiàn)了。
??? 在將對(duì)象實(shí)例綁定到j(luò)boss jnp server后,當(dāng)遠(yuǎn)程端采用context.lookup()方式獲取遠(yuǎn)程對(duì)象實(shí)例并開(kāi)始調(diào)用時(shí),jboss jndi的實(shí)現(xiàn)方法是從jnp server上獲取對(duì)象實(shí)例,將其序列化回本地,然后在本地進(jìn)行反序列化,之后在本地進(jìn)行類調(diào)用。
??? 通過(guò)這個(gè)機(jī)制,就可以知道了,本地其實(shí)是必須有綁定到j(luò)boss上的對(duì)象實(shí)例的class的,否則反序列化的時(shí)候肯定就失敗了,而遠(yuǎn)程通訊需要做到的是在遠(yuǎn)程執(zhí)行某動(dòng)作,并獲取到相應(yīng)的結(jié)果,可見(jiàn)純粹基于JNDI是無(wú)法實(shí)現(xiàn)遠(yuǎn)程通訊的。
??? 但JNDI也是實(shí)現(xiàn)分布式服務(wù)框架一個(gè)很關(guān)鍵的技術(shù)點(diǎn),因?yàn)榭梢酝ㄟ^(guò)它來(lái)實(shí)現(xiàn)透明化的遠(yuǎn)端和本地調(diào)用,就像ejb,另外它也是個(gè)很好的隱藏實(shí)際部署機(jī)制(就像datasource)等的方案。
??? 總結(jié)
??? 由上一系列的分析可知,在遠(yuǎn)程通訊領(lǐng)域中,涉及的知識(shí)點(diǎn)還是相當(dāng)?shù)亩嗟?,例如有:通信協(xié)議或遠(yuǎn)程調(diào)用協(xié)議(tcp/http/udp/rmi/xml-rpc etc.)、消息機(jī)制、網(wǎng)絡(luò)IO(BIO/NIO/AIO)、MultiThread、本地調(diào)用與遠(yuǎn)程調(diào)用的透明化方案(涉及java classloader、Dynamic Proxy、Unit Test etc.)、異步與同步調(diào)用、網(wǎng)絡(luò)通信處理機(jī)制(自動(dòng)重連、廣播、異常、池處理等等)、Java Serialization (各種協(xié)議的私有序列化機(jī)制等)、各種框架的實(shí)現(xiàn)原理(傳輸格式、如何將傳輸格式轉(zhuǎn)化為流的、如何將請(qǐng)求信息轉(zhuǎn)化為傳輸格式的、如何接收流的、如何將流還原為傳輸格式的等等),要精通其中的哪些東西,得根據(jù)實(shí)際需求來(lái)決定了,只有在了解了原理的情況下才能很容易的做出選擇,甚至可以根據(jù)需求做私有的遠(yuǎn)程通訊協(xié)議,對(duì)于從事分布式服務(wù)平臺(tái)或開(kāi)發(fā)較大型的分布式應(yīng)用的人而言,我覺(jué)得至少上面提及的知識(shí)點(diǎn)是需要比較了解的。
posted on 2009-08-15 15:10
jadmin 閱讀(238)
評(píng)論(0) 編輯 收藏