posts - 495,  comments - 11,  trackbacks - 0

          ??? 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 閱讀(240) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 江源县| 兴山县| 宜阳县| 西华县| 莆田市| 商水县| 苏尼特右旗| 大庆市| 田林县| 十堰市| 南漳县| 南丰县| 宁乡县| 青神县| 九龙坡区| 宜州市| 汶上县| 江津市| 河南省| 彭州市| 江北区| 西乡县| 灵台县| 高陵县| 上蔡县| 巩留县| 沁阳市| 侯马市| 白银市| 永平县| 克拉玛依市| 左云县| 迁西县| 遂川县| 昭通市| 苗栗县| 普陀区| 邳州市| 周宁县| 泗洪县| 丹东市|