<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 59, 文章 - 4, 評論 - 184, 引用 - 7
    數(shù)據(jù)加載中……

    【ESB專題】之二 - Message Channel及其相關(guān)模式

     

     

    在前面一個專題中,我們列出了一個ESB系統(tǒng)所需要關(guān)心的所有方面的關(guān)鍵組件,這里介紹其中的Message Channels所關(guān)注的問題及相關(guān)的模式。

     

    Message Channel主題之下包含以下模式,分別用于解決channel中不同方面的問題:

     

    l         Point-to-Point Channel  

    l         Publish-Subscribe Channel   

    l         Datatype Channel  

    l         Invalid Message Channel      

    l         Dead Letter Channel     

    l         Guaranteed Delivery     

    l         Channel Adapter    

    l         Messaging Bridge  

    l         Message Bus  

     

     

    當(dāng)兩個應(yīng)用需要交換數(shù)據(jù),它們通過連接兩端的channel來發(fā)送數(shù)據(jù)。發(fā)送的應(yīng)用可能不知道哪個應(yīng)用將接受數(shù)據(jù)。然而,通過選擇特定的channel來發(fā)送,發(fā)送者知道接受者將是守候在channel另一端等待數(shù)據(jù)的應(yīng)用之一。通過這種方式,生產(chǎn)數(shù)據(jù)的應(yīng)用有了一個同數(shù)據(jù)消費者通訊的途徑。

     

    Message Channels面對的各個主要問題:

     

    如果一個應(yīng)用要傳輸或接受數(shù)據(jù),它一定會用到一個channel。問題是你的應(yīng)用要知道要使用什么樣的channel,以及用它來做什么。

     

    固定的channel集合 Channel中討論的一個主題是,一個應(yīng)用可用的Message Channel集合一般是固定的。設(shè)計一個應(yīng)用時,一個開發(fā)者必須知道將某種類型的數(shù)據(jù)放到哪里可以同其他應(yīng)用共享該數(shù)據(jù),以及從什么地方可以找到其他應(yīng)用的特定數(shù)據(jù)。這些通訊路徑不會在運行期動態(tài)的創(chuàng)建和發(fā)現(xiàn);它們需要在設(shè)計期間就確定下來,以便應(yīng)用知道它的數(shù)據(jù)從哪里來以及數(shù)據(jù)將去哪里。( 雖然大多數(shù)channel必須被靜態(tài)定義使正確的,但是也有例外,有些情況下動態(tài)channel是很好用的。一個例外就是Request-Reply模式中的reply channel。請求者可以創(chuàng)建或者獲得一個應(yīng)答者不知道的新的channel,并在請求消息中指定該channelReturn Address,應(yīng)答者就可以使用它。另外一個例外是支持集成channels的消息系統(tǒng)實現(xiàn)。一個接受者可以訂閱一個集成體系的根channel,然后發(fā)送者可以發(fā)布消息到一個子channel,而接受者不需要知道子channel,仍然會收到消息。這些都是不常見的情況,channel通常仍然是在部署之前被定義,并且應(yīng)用被設(shè)計連接到一個已知的channel集合 )。

     

    決定channel的集合 一個相關(guān)的主題是,誰決定那些Message Channel是可用的 message系統(tǒng)還是應(yīng)用程序?換句話說,是由消息系統(tǒng)確定一些channel,然后要求應(yīng)用程序使用它們?還是應(yīng)用決定它們需要什么channel,然后要求消息系統(tǒng)提供它們?這個問題沒有一個簡單的答案,設(shè)計必須的channel集合是迭代的。首先,應(yīng)用要決定消息系統(tǒng)提供哪些channel。然后應(yīng)用將圍繞這些channel設(shè)計它們的通訊,但是如果這樣是不可行的,它們將需要添加額外的channel。當(dāng)一些應(yīng)用已經(jīng)使用了一個確定的channel集合,當(dāng)加入新的應(yīng)用,它們將使用已存在的channel。當(dāng)為應(yīng)用添加新的功能,它們需要新的channel

     

    單向channel 另外一個經(jīng)常引起混淆的是一個Message channel是單向的還是雙向的。技術(shù)上來說,兩者都不是,一個channel更像是一個桶,一個應(yīng)用放入數(shù)據(jù),另外一個應(yīng)用從中取出數(shù)據(jù)。但是由于數(shù)據(jù)是放在消息中從一個應(yīng)用傳到另一個,這使得channel具有方向性,使它變成單向的。如果一個channel是雙向的,應(yīng)用將從中發(fā)送和接受數(shù)據(jù),雖然技術(shù)上是可行的,但是會有小小的問題,應(yīng)用將有可能持續(xù)的取出自己放進去的希望發(fā)送給其他應(yīng)用的消息。所以,為了實踐性的目的,channel是單向的。作為結(jié)論,兩個應(yīng)用如果有雙向通訊,它們需要兩個channel,每個方向一個

     

    如何使用Message channels

     

    現(xiàn)在我們來討論以下如何使用channel

     

    一對一或者一對多 當(dāng)你的應(yīng)用共享一些數(shù)據(jù),你希望只將它共享給一個應(yīng)用還是對它感興趣的所有應(yīng)用?要傳送數(shù)據(jù)到一個單獨的應(yīng)用,使用Point-to-Point Channel。這并不意味著發(fā)送到這個channel的每個數(shù)據(jù)都發(fā)送給同樣的接受者,因為一個channel可能有多個接受者。它意味著,實際上,保證每個數(shù)據(jù)都被同一個應(yīng)用接收。如果你想讓所有接收應(yīng)用都能接收數(shù)據(jù),使用Publish-Subscribe Channel。當(dāng)你通過這種方式發(fā)送數(shù)據(jù),channel將高效的復(fù)制數(shù)據(jù)到每一個接收者。

     

    什么類型的數(shù)據(jù) 任何內(nèi)存中的數(shù)據(jù)都有一個類型。另一方面,所有數(shù)據(jù)都是一些bytes集合。消息系統(tǒng)工作同這類似,消息內(nèi)容必須符合某些類型以便接受者了解數(shù)據(jù)的結(jié)構(gòu)。Datatype Channel認為在一個channel中的數(shù)據(jù)必須擁有同樣的類型。這也是為什么消息系統(tǒng)需要很多channel的主要原因(每個channel一種格式)。如果數(shù)據(jù)可以是任意的格式,那么消息系統(tǒng)在兩個應(yīng)用之間只需要兩條channel

     

    無效的和過期的消息 消息系統(tǒng)可以確定消息被正確的傳輸,但是它不能保證接受者知道如何處理它。接收者對數(shù)據(jù)格式和意義存在期望。當(dāng)它接收到一個不符合期望的消息,它什么也不能做。它們能作的,就是將這個陌生的消息放入到一個特別設(shè)計的Invalid Message Channel并希望某些監(jiān)控這個channel的工具能夠取出這個消息,并指出該如何處置它們。許多消息系統(tǒng)有一個類似的內(nèi)建特征,一個Dead Letter Channel,用來存放成功送出但卻無法成功投遞的消息。另外,一個系統(tǒng)管理工具應(yīng)該監(jiān)視Dead Letter Channel并且決定如何處置這些無法投遞的消息。

     

    故障檢測 如果一個消息系統(tǒng)發(fā)生故障或停機維護,它的消息會怎樣?當(dāng)它重啟并重新運行,它的消息能否還在它的channel中?默認的:不會;channel將消息存儲在內(nèi)存中。然而,Guaranteed Deliverychannel持久化以便將它們的消息存儲到硬盤上。這會影響效率,但會使消息更加可靠,即使消息系統(tǒng)是不可靠的。

     

    非消息客戶端 如果一個應(yīng)用不能連接到一個消息系統(tǒng)但是仍然想要參與消息怎么辦?通常它只能自認倒霉了,但是如果消息系統(tǒng)可以通過某種方式連接到應(yīng)用系統(tǒng) 通過它的用戶界面,它的service API,它的數(shù)據(jù)庫,或者一個TCP/IPHTTP這樣的網(wǎng)絡(luò)連接 那么消息系統(tǒng)可以使用一個Channel Adapter。這允許你連接到一個或多個連接到應(yīng)用的channel而不必改變應(yīng)用或者可能也不需要一個同應(yīng)用運行在同一個機器上的消息客戶端。有時‘非消息客戶端’真的是一個消息客戶端,但是只有連接的是其他消息系統(tǒng)的時候。

     

    通訊中樞 隨著越來越多的企業(yè)應(yīng)用系統(tǒng)連接到消息系統(tǒng)以便通過消息暴露他們的功能,消息系統(tǒng)變成了企業(yè)中一站式功能的集散地。一個應(yīng)用只需簡單的知道用哪個channel來請求功能,以及從哪個監(jiān)聽結(jié)果。消息系統(tǒng)本質(zhì)上變成一個消息總線,一個提供所有企業(yè)應(yīng)用甚至變化中的應(yīng)用和功能的中樞。你可以更快速的集成。

     

    如你所見,使用消息構(gòu)建應(yīng)用不僅僅是將他們連接到消息系統(tǒng)并發(fā)送消息。消息必須使用Message Channel來發(fā)送。Channel必須被設(shè)計為某個目的服務(wù),比如基于被共享的數(shù)據(jù)類型,共享數(shù)據(jù)的應(yīng)用類型,和接收數(shù)據(jù)的應(yīng)用。

     

    posted on 2005-11-17 22:56 fisher 閱讀(1295) 評論(1)  編輯  收藏 所屬分類: Programing

    評論

    # 【ESB專題】之二 - Message Channel及其相關(guān)模式 [TrackBack]  回復(fù)  更多評論   

    介紹消息ESB中的Message Channels的關(guān)注問題及相關(guān)模式
    [引用提示]fisher on csdn 引用了該文章, 地址: http://blog.csdn.net/flyingbug/archive/2005/11/18/532678.aspx
    2005-11-18 23:32 | fisher on csdn
    主站蜘蛛池模板: 国产h肉在线视频免费观看| 日本免费一区二区三区| 亚洲精品tv久久久久久久久 | 亚洲色大成网站www| 国产一级高清免费观看| 久久精品免费网站网| 亚洲理论在线观看| 免费在线观看黄网| 99热在线免费播放| 国产亚洲日韩在线a不卡| 亚洲国产精品无码AAA片| 国产成人免费高清激情视频| 国产成人精品免费视频大全| 亚洲人成影院在线高清| 亚洲免费一区二区| 国产福利在线免费| 久久最新免费视频| 亚洲精品无码少妇30P| 亚洲AV永久无码精品成人| 最新69国产成人精品免费视频动漫| 成人久久免费网站| 看亚洲a级一级毛片| 亚洲美女激情视频| 中文字幕亚洲电影| 搡女人免费视频大全| 可以免费观看的毛片| 免费精品国产自产拍在线观看| 亚洲第一页中文字幕| 激情97综合亚洲色婷婷五| 免费网站看v片在线香蕉| 亚洲黄色免费网址| 中文无码日韩欧免费视频| 亚洲av无码一区二区三区天堂| 337p欧洲亚洲大胆艺术| 亚洲欧洲无码AV电影在线观看 | 人人鲁免费播放视频人人香蕉| 亚洲国产品综合人成综合网站| 亚洲精品无码Av人在线观看国产| 成人免费视频观看无遮挡| 亚洲精品视频免费看| 久久伊人免费视频|