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