J2EE之巔

           

          同步代理模式 Synchronization Proxy Pattern

          模式發(fā)現(xiàn)者 : 蔡超

          北京天融信,軟件架構(gòu)師

          SUN certified Enterprise Architect

          Microsoft certified Solution Developer

          IBM certified RUP Specialist

          聯(lián)系方式 :cai_chao@topsec.com.cn,chaocai2001@yahoo.com.cn

          010-82776427

          語(yǔ)境

          在基于異步通信方式的系統(tǒng)中,實(shí)現(xiàn)模塊的同步調(diào)用。

          問(wèn)題

          消息隊(duì)列已經(jīng)成為目前很多軟件選用的通訊方式,消息模式使得不同分布式組件間的耦合性較為松散,提高了系統(tǒng)的可維護(hù)性和可擴(kuò)充性。但是有時(shí)我們希望在這種情況下能夠模擬同步的調(diào)用方式,希望能夠通過(guò)一個(gè)組件透明的幫我們實(shí)現(xiàn)這種異步和同步調(diào)用的轉(zhuǎn)換。

          解決方案

          p1.jpg
          圖表
          1 基于消息的分布式系統(tǒng)

          上圖是一種常見(jiàn)的基于消息的分布系統(tǒng)結(jié)構(gòu),系統(tǒng)中包含兩條隊(duì)列。命令隊(duì)列用于傳送模塊間相互調(diào)用的命令對(duì)象,響應(yīng)隊(duì)列用于傳送命令處理后的響應(yīng)結(jié)果對(duì)象。

          在通常情況下消息隊(duì)列上的模塊會(huì)以異步的方式工作,這種情況下模塊通常不關(guān)心命令執(zhí)行后的狀況,常常是不須返回值的。

          為了模擬同步調(diào)用我們通過(guò)一個(gè) SynProxy 組件來(lái)幫助我們完成由異步到同步調(diào)用的模擬。使得 Client 對(duì)其他模塊的調(diào)好像是同步的一樣。

          SynProxy 組件的結(jié)構(gòu)如下:

          p2.jpg
          圖表
          2 SynProxy 的靜態(tài)結(jié)構(gòu)

          SynProxy: 組織完成異步到同步調(diào)用的轉(zhuǎn)換

          WaitingQueue: 存放還未獲得執(zhí)行返回值的 Command 對(duì)象

          UIDCreator: 產(chǎn)生能夠唯一標(biāo)示每個(gè) Command 對(duì)象的 UID

          ResponseReceiver: 監(jiān)聽(tīng)響應(yīng)隊(duì)列中的響應(yīng)消息,它在獨(dú)立的線程中運(yùn)行

          Command :命令對(duì)象

          Response :響應(yīng)對(duì)象p3.jpg

          ?

          圖表 3 將異同步調(diào)用轉(zhuǎn)化成同步調(diào)用的過(guò)程

          部分解釋: ( 以上以在 JAVA 環(huán)境中為例 )

          Wait 表示調(diào)用 Command wait 方法阻塞住當(dāng)前線程

          Command 執(zhí)行模塊在執(zhí)行了響應(yīng)操作后生產(chǎn) Response 對(duì)象用于放回結(jié)果, Response 對(duì)象中的 UID 屬性應(yīng)該與處理的 Command UID 的值相同

          Notify 表示調(diào)用 Command notify 方法喚醒被阻塞的線程

          上面過(guò)程中的 wait 設(shè)置了阻塞的超時(shí)時(shí)間(來(lái)自于 Command 對(duì)象的屬性值)

          posted on 2006-11-10 17:28 超越巔峰 閱讀(1504) 評(píng)論(0)  編輯  收藏 所屬分類: Design Pattern

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(12)

          隨筆分類(54)

          隨筆檔案(59)

          文章分類(2)

          文章檔案(1)

          相冊(cè)

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 湟源县| 东台市| 古浪县| 高青县| 长垣县| 卓资县| 德化县| 家居| 穆棱市| 仁寿县| 塘沽区| 馆陶县| 泗洪县| 弋阳县| 海门市| 扬州市| 新沂市| 乌兰浩特市| 津市市| 汕尾市| 政和县| 乾安县| 奉贤区| 乌鲁木齐县| 柳林县| 屏东县| 疏勒县| 凯里市| 依安县| 申扎县| 湖口县| 德江县| 本溪市| 璧山县| 临汾市| 蒙城县| 龙门县| 拉孜县| 灯塔市| 扶余县| 诏安县|