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

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

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

    空間站

    北極心空

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
    消息隊列技術是分布式應用間交換信息的一種技術。消息隊列可駐留在內存或磁盤上,隊列存儲消息直到它們被應用程序讀走。通過消息隊列,應用程序可獨立地執(zhí)行--它們不需要知道彼此的位置、或在繼續(xù)執(zhí)行前不需要等待接收程序接收此消息。

    ??? 消息中間件概述
    ??? 消息隊列技術是分布式應用間交換信息的一種技術。消息隊列可駐留在內存或磁盤上,隊列存儲消息直到它們被應用程序讀走。通過消息隊列,應用程序可獨立地執(zhí)行--它們不需要知道彼此的位置、或在繼續(xù)執(zhí)行前不需要等待接收程序接收此消息。

    ??? 在分布式計算環(huán)境中,為了集成分布式應用,開發(fā)者需要對異構網絡環(huán)境下的分布式應用提供有效的通信手段。為了管理需要共享的信息,對應用提供公共的信息交換機制是重要的。

    ??? 設計分布式應用的方法主要有:遠程過程調用(PRC)--分布式計算環(huán)境(DCE)的基礎標準成分之一;對象事務監(jiān)控(OTM)--基于CORBA的面向對象工業(yè)標準與事務處理(TP)監(jiān)控技術的組合;消息隊列(MessageQueue)--構造分布式應用的松耦合方法。

    ??? (a) 分布計算環(huán)境/遠程過程調用 (DCE/RPC)
    ??? RPC是DCE的成分,是一個由開放軟件基金會(OSF)發(fā)布的應用集成的軟件標準。RPC模仿一個程序用函數引用來引用另一程序的傳統(tǒng)程序設計方法,此引用是過程調用的形式,一旦被調用,程序的控制則轉向被調用程序。

    ??? 在RPC實現(xiàn)時,被調用過程可在本地或遠地的另一系統(tǒng)中駐留并在執(zhí)行。當被調用程序完成處理輸入數據,結果放在過程調用的返回變量中返回到調用程序。RPC完成后程序控制則立即返回到調用程序。因此RPC模仿子程序的調用/返回結構,它僅提供了Client(調用程序)和Server(被調用過程)間的同步數據交換。

    ??? (b) 對象事務監(jiān)控 (OTM)
    ??? 基于CORBA的面向對象工業(yè)標準與事務處理(TP)監(jiān)控技術的組合,在CORBA規(guī)范中定義了:使用面向對象技術和方法的體系結構;公共的Client/Server程序設計接口;多平臺間傳輸和翻譯數據的指導方針;開發(fā)分布式應用接口的語言(IDL)等,并為構造分布的Client/Server應用提供了廣泛及一致的模式。

    ??? (c) 消息隊列 (Message Queue)
    ??? 消息隊列為構造以同步或異步方式實現(xiàn)的分布式應用提供了松耦合方法。消息隊列的API調用被嵌入到新的或現(xiàn)存的應用中,通過消息發(fā)送到內存或基于磁盤的隊列或從它讀出而提供信息交換。消息隊列可用在應用中以執(zhí)行多種功能,比如要求服務、交換信息或異步處理等。

    ??? 中間件是一種獨立的系統(tǒng)軟件或服務程序,分布式應用系統(tǒng)借助這種軟件在不同的技術之間共享資源,管理計算資源和網絡通訊。它在計算機系統(tǒng)中是一個關鍵軟件,它能實現(xiàn)應用的互連和互操作性,能保證系統(tǒng)的安全、可靠、高效的運行。中間件位于用戶應用和操作系統(tǒng)及網絡軟件之間,它為應用提供了公用的通信手段,并且獨立于網絡和操作系統(tǒng)。中間件為開發(fā)者提供了公用于所有環(huán)境的應用程序接口,當應用程序中嵌入其函數調用,它便可利用其運行的特定操作系統(tǒng)和網絡環(huán)境的功能,為應用執(zhí)行通信功能。

    ??? 如果沒有消息中間件完成信息交換,應用開發(fā)者為了傳輸數據,必須要學會如何用網絡和操作系統(tǒng)軟件的功能,編寫相應的應用程序來發(fā)送和接收信息,且交換信息沒有標準方法,每個應用必須進行特定的編程從而和多平臺、不同環(huán)境下的一個或多個應用通信。例如,為了實現(xiàn)網絡上不同主機系統(tǒng)間的通信,將要求具備在網絡上如何交換信息的知識(比如用TCP/IP的socket程序設計);為了實現(xiàn)同一主機內不同進程之間的通訊,將要求具備操作系統(tǒng)的消息隊列或命名管道(Pipes)等知識。

    ??? 目前中間件的種類很多,如交易管理中間件(如IBM的CICS)、面向Java應用的Web應用服務器中間件(如IBM的WebSphere Application Server)等,而消息傳輸中間件(MOM)是其中的一種。它簡化了應用之間數據的傳輸,屏蔽底層異構操作系統(tǒng)和網絡平臺,提供一致的通訊標準和應用開發(fā),確保分布式計算網絡環(huán)境下可靠的、跨平臺的信息傳輸和數據交換。它基于消息隊列的存儲-轉發(fā)機制,并提供特有的異步傳輸機制,能夠基于消息傳輸和異步事務處理實現(xiàn)應用整合與數據交換。

    ??? IBM 消息中間件MQ以其獨特的安全機制、簡便快速的編程風格、卓越不凡的穩(wěn)定性、可擴展性和跨平臺性,以及強大的事務處理能力和消息通訊能力,成為業(yè)界市場占有率最高的消息中間件產品。

    ??? MQ具有強大的跨平臺性,它支持的平臺數多達35種。它支持各種主流Unix操作系統(tǒng)平臺,如:HP-UX、AIX、SUN Solaris、Digital UNIX、Open VMX、SUNOS、NCR UNIX;支持各種主機平臺,如:OS/390、MVS/ESA、VSE/ESA;同樣支持Windows NT服務器。在PC平臺上支持Windows9X/Windows NT/Windows 2000和UNIX (UnixWare、Solaris)以及主要的Linux版本(Redhat、TurboLinux等)。此外,MQ還支持其他各種操作系統(tǒng)平臺,如:OS/2、AS/400、Sequent DYNIX、SCO OpenServer、SCO UnixWare、Tandem等。

    ??? MQ的基本概念:

    ??? 1) 隊列管理器
    ??? 隊列管理器是MQ系統(tǒng)中最上層的一個概念,由它為我們提供基于隊列的消息服務。

    ??? 2) 消息
    ??? 在MQ中,我們把應用程序交由MQ傳輸的數據定義為消息,我們可以定義消息的內容并對消息進行廣義的理解,比如:用戶的各種類型的數據文件,某個應用向其它應用發(fā)出的處理請求等都可以作為消息。消息有兩部分組成:

    ??? 消息描述符(Message Discription或Message Header),描述消息的特征,如:消息的優(yōu)先級、生命周期、消息Id等;

    ??? 消息體(Message Body),即用戶數據部分。在MQ中,消息分為兩種類型,非永久性(non-persistent)消息和永久性(persistent)消息,非永久性消息是存儲在內存中的,它是為了提高性能而設計的,當系統(tǒng)掉電或MQ隊列管理器重新啟動時,將不可恢復。當用戶對消息的可靠性要求不高,而側重系統(tǒng)的性能表現(xiàn)時,可以采用該種類型的消息,如:當發(fā)布股票信息時,由于股票信息是不斷更新的,我們可能每若干秒就會發(fā)布一次,新的消息會不斷覆蓋舊的消息。永久性消息是存儲在硬盤上,并且紀錄數據日志的,它具有高可靠性,在網絡和系統(tǒng)發(fā)生故障等情況下都能確保消息不丟、不重。

    ??? 此外,在MQ中,還有邏輯消息和物理消息的概念。利用邏輯消息和物理消息,我們可以將大消息進行分段處理,也可以將若干個本身完整的消息在應用邏輯上歸為一組進行處理。

    ??? 3) 隊列
    ??? 隊列是消息的安全存放地,隊列存儲消息直到它被應用程序處理。

    ??? 消息隊列以下述方式工作:

    ??? a) 程序A形成對消息隊列系統(tǒng)的調用,此調用告知消息隊列系統(tǒng),消息準備好了投向程序B;

    ??? b) 消息隊列系統(tǒng)發(fā)送此消息到程序B駐留處的系統(tǒng),并將它放到程序B的隊列中;

    ??? c) 適當時間后,程序B從它的隊列中讀此消息,并處理此信息。

    ??? 由于采用了先進的程序設計思想以及內部工作機制,MQ能夠在各種網絡條件下保證消息的可靠傳遞,可以克服網絡線路質量差或不穩(wěn)定的現(xiàn)狀,在傳輸過程中,如果通信線路出現(xiàn)故障或遠端的主機發(fā)生故障,本地的應用程序都不會受到影響,可以繼續(xù)發(fā)送數據,而無需等待網絡故障恢復或遠端主機正常后再重新運行。

    ??? 在MQ中,隊列分為很多種類型,其中包括:本地隊列、遠程隊列、模板隊列、動態(tài)隊列、別名隊列等。

    ??? 本地隊列又分為普通本地隊列和傳輸隊列,普通本地隊列是應用程序通過API對其進行讀寫操作的隊列;傳輸隊列可以理解為存儲-轉發(fā)隊列,比如:我們將某個消息交給MQ系統(tǒng)發(fā)送到遠程主機,而此時網絡發(fā)生故障,MQ將把消息放在傳輸隊列中暫存,當網絡恢復時,再發(fā)往遠端目的地。

    ??? 遠程隊列是目的隊列在本地的定義,它類似一個地址指針,指向遠程主機上的某個目的隊列,它僅僅是個定義,不真正占用磁盤存儲空間。

    ??? 模板隊列和動態(tài)隊列是MQ的一個特色,它的一個典型用途是用作系統(tǒng)的可擴展性考慮。我們可以創(chuàng)建一個模板隊列,當今后需要新增隊列時,每打開一個模板隊列,MQ便會自動生成一個動態(tài)隊列,我們還可以指定該動態(tài)隊列為臨時隊列或者是永久隊列,若為臨時隊列我們可以在關閉它的同時將它刪除,相反,若為永久隊列,我們可以將它永久保留,為我所用。

    ??? 4) 通道
    ??? 通道是MQ系統(tǒng)中隊列管理器之間傳遞消息的管道,它是建立在物理的網絡連接之上的一個邏輯概念,也是MQ產品的精華。

    ??? 在MQ中,主要有三大類通道類型,即消息通道,MQI通道和Cluster通道。消息通道是用于在MQ的服務器和服務器之間傳輸消息的,需要強調指出的是,該通道是單向的,它又有發(fā)送(sender), 接收(receive), 請求者(requestor), 服務者(server)等不同類型,供用戶在不同情況下使用。MQI通道是MQ Client和MQ Server之間通訊和傳輸消息用的,與消息通道不同,它的傳輸是雙向的。群集(Cluster)通道是位于同一個MQ 群集內部的隊列管理器之間通訊使用的。

    ??? MQ的工作原理


    ??? 如圖所示:

    ??? 首先來看本地通訊的情況,應用程序A和應用程序B運行于同一系統(tǒng)A,它們之間可以借助消息隊列技術進行彼此的通訊:應用程序A向隊列1發(fā)送一條信息,而當應用程序B需要時就可以得到該信息。

    ??? 其次是遠程通訊的情況,如果信息傳輸的目標改為在系統(tǒng)B上的應用程序C,這種變化不會對應用程序A產生影響,應用程序A向隊列2發(fā)送一條信息,系統(tǒng)A的MQ發(fā)現(xiàn)Q2所指向的目的隊列實際上位于系統(tǒng)B,它將信息放到本地的一個特殊隊列-傳輸隊列(Transmission Queue)。我們建立一條從系統(tǒng)A到系統(tǒng)B的消息通道,消息通道代理將從傳輸隊列中讀取消息,并傳遞這條信息到系統(tǒng)B,然后等待確認。只有MQ接到系統(tǒng)B成功收到信息的確認之后,它才從傳輸隊列中真正將該信息刪除。如果通訊線路不通,或系統(tǒng)B不在運行,信息會留在傳輸隊列中,直到被成功地傳送到目的地。這是MQ最基本而最重要的技術--確保信息傳輸,并且是一次且僅一次(once-and-only-once)的傳遞。

    ??? MQ提供了用于應用集成的松耦合的連接方法,因為共享信息的應用不需要知道彼此物理位置(網絡地址);不需要知道彼此間怎樣建立通信;不需要同時處于運行狀態(tài);不需要在同樣的操作系統(tǒng)或網絡環(huán)境下運行。

    ??? MQ的基本配置舉例

    ??? 在上圖中,要實現(xiàn)網絡上兩臺主機上的通訊,若采用點對點的通訊方式,我們至少要建立如下MQ的對象:

    ??? 在發(fā)送方A:

    ??? 1) 建立隊列管理器QMA: crtmqm -q QMA

    ??? 2) 定義本地傳輸隊列: define qlocal (QMB) usage (xmitq) defpsist(yes)

    ??? 3) 創(chuàng)建遠程隊列: define qremote (QR.TOB) rname (LQB) rqmname (QMB) xmitq (QMB)

    ??? 4) 定義發(fā)送通道: define channel (A.TO.B) chltype (sdr) conname ('IP of B') xmitq (QMB) + trptype (tcp)

    ??? 在接收方B:

    ??? 1) 建立隊列管理器QMB: crtmqm -q QMB

    ??? 2) 定義本地隊列QLB: define qlocal (LQB)

    ??? 3) 創(chuàng)建接收通道: define channel (A.TO.B) chltype (rcvr) trptype (tcp)

    ??? 經過上述配置,我們就可以實現(xiàn)從主機A到B的單向通訊,若要實現(xiàn)二者之間的雙向通訊,可參考此例創(chuàng)建所需要的MQ對象。

    ??? MQ的通訊模式

    ??? 1) 點對點通訊:點對點方式是最為傳統(tǒng)和常見的通訊方式,它支持一對一、一對多、多對多、多對一等多種配置方式,支持樹狀、網狀等多種拓撲結構。

    ??? 2) 多點廣播:MQ適用于不同類型的應用。其中重要的,也是正在發(fā)展中的是"多點廣播"應用,即能夠將消息發(fā)送到多個目標站點(Destination List)。可以使用一條MQ指令將單一消息發(fā)送到多個目標站點,并確保為每一站點可靠地提供信息。MQ不僅提供了多點廣播的功能,而且還擁有智能消息分發(fā)功能,在將一條消息發(fā)送到同一系統(tǒng)上的多個用戶時,MQ將消息的一個復制版本和該系統(tǒng)上接收者的名單發(fā)送到目標MQ系統(tǒng)。目標MQ系統(tǒng)在本地復制這些消息,并將它們發(fā)送到名單上的隊列,從而盡可能減少網絡的傳輸量。

    ??? 3) 發(fā)布/訂閱(Publish/Subscribe)模式:發(fā)布/訂閱功能使消息的分發(fā)可以突破目的隊列地理指向的限制,使消息按照特定的主題甚至內容進行分發(fā),用戶或應用程序可以根據主題或內容接收到所需要的消息。發(fā)布/訂閱功能使得發(fā)送者和接收者之間的耦合關系變得更為松散,發(fā)送者不必關心接收者的目的地址,而接收者也不必關心消息的發(fā)送地址,而只是根據消息的主題進行消息的收發(fā)。在MQ家族產品中,MQ Event Broker是專門用于使用發(fā)布/訂閱技術進行數據通訊的產品,它支持基于隊列和直接基于TCP/IP兩種方式的發(fā)布和訂閱。

    ??? 4) 群集(Cluster):為了簡化點對點通訊模式中的系統(tǒng)配置,MQ提供Cluster(群集)的解決方案。群集類似于一個域(Domain),群集內部的隊列管理器之間通訊時,不需要兩兩之間建立消息通道,而是采用群集(Cluster)通道與其它成員通訊,從而大大簡化了系統(tǒng)配置。此外,群集中的隊列管理器之間能夠自動進行負載均衡,當某一隊列管理器出現(xiàn)故障時,其它隊列管理器可以接管它的工作,從而大大提高系統(tǒng)的高可靠性。

    ??? MQ Server和MQ Client

    ??? MQ產品分為Server和Client 兩種版本,在MQ服務器的運行環(huán)境下,有隊列管理器、隊列、消息通道等對象,它提供全面的消息服務;MQ Client為我們提供了一個MQ應用程序的開發(fā)和運行環(huán)境,它是MQ API的Client實現(xiàn)。在客戶端環(huán)境下,沒有隊列管理器、隊列等對象,它通過MQI通道與服務器之間建立通訊,并將消息從客戶端發(fā)往服務器端的隊列,或從Server端的隊列中取得消息,它比較適合于網絡條件較好或實時通訊的情況。同時要指出的是:采用MQ Client并不會導致數據的丟失或不完整性。MQ Client提供下列好處:適合同步處理的工作模式;減少系統(tǒng)負擔;減少系統(tǒng)管理開銷;減少磁盤空間要求等。

    ??? MQ的API

    ??? MQ支持多種編程語言,其中包括:C、C++、Java、VisualBasic、COBOL、PL/1、RPG等,同時也支持多種流行的開發(fā)工具,如:WebSphere Studio Application Developer, PowerBuiler、Microsoft Visual C++、Visual Basic、Delphi等。并且,MQ在不同平臺上提供統(tǒng)一的編程接口,僅需重新編譯就可完成不同平臺間程序的移植。MQ的API接口十分簡單易學,用戶僅需利用MQ的13個常用而又功能強大的函數調用,便可以以最快的速度,寫出各種復雜的應用程序。用戶可以將主要精力集中于應用業(yè)務邏輯的實現(xiàn),而不是底層通訊、例外處理等方面。

    ??? 以C語言為例,一個MQ應用的開發(fā)流程如下:

    ??? MQCONN() /*建立與隊列管理器的連接*/ MQOPEN() /*打開要進行讀寫操作的隊列*/ MQPUT() /*將消息放入隊列*/ MQGET() /*從隊列中讀取消息*/ MQINQ() /*查詢隊列的屬性*/ MQSET() /*設置隊列的屬性*/ MQCLOSE() /*在讀寫等操作進行完之后,將隊列關閉*/ MQDISC() /*斷開與隊列管理器的連接,釋放相關的資源*/
    ??? 關于作者
    ??? 婁麗軍, IBM公司 軟件部售前工程師, 1998年加入IBM公司軟件部,四年來一直從事IBM通訊及業(yè)務整合中間件(WebSphere Business Integration家族)產品的技術支持工作,是軟件部從事該領域技術支持時間最長的工程師之一,擁有WebSphere Business Integration相關的產品經驗,這些產品包括WebSphere MQ家族的所有產品:MQSeries, MQ Integrator, MQ Workflow以及CrossWorlds等,并具有很多大型項目的支持經驗,曾參與國家稅務總局,人民銀行清算系統(tǒng)、華夏銀行電子聯(lián)行系統(tǒng)、中國聯(lián)通計費系統(tǒng)、海關與國家稅務總局互連系統(tǒng),以及公安部、鐵道部、中信實業(yè)銀行、電信等重要客戶的有關項目的技術支持。


    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=837648

    posted on 2006-12-15 20:17 蘆葦 閱讀(842) 評論(0)  編輯  收藏 所屬分類: JAVA其他
    主站蜘蛛池模板: 在线观看人成视频免费无遮挡| 狠狠色伊人亚洲综合成人| 中字幕视频在线永久在线观看免费| 99热免费在线观看| 小日子的在线观看免费| 免费91最新地址永久入口| 久别的草原电视剧免费观看| 男女作爱在线播放免费网站| 久草视频在线免费看| 一级毛片在线免费看| 在线看片免费人成视久网| ww在线观视频免费观看| 在线观看无码AV网站永久免费| 国产成人免费高清激情视频| 亚洲成AV人片在线播放无码| 亚洲Av无码乱码在线播放| 亚洲一区二区三区乱码A| 亚洲色图综合在线| 亚洲日本va在线视频观看| 婷婷亚洲久悠悠色悠在线播放 | www.av在线免费观看| 五月天婷婷免费视频| 两个人看的www免费视频中文| 免费毛片a线观看| 18级成人毛片免费观看| 毛片基地免费观看| 免费中文字幕不卡视频| 亚洲中久无码永久在线观看同| 久久精品国产亚洲夜色AV网站| 亚洲理论片在线中文字幕| 亚洲爆乳无码精品AAA片蜜桃| 日本免费精品一区二区三区| 国色精品va在线观看免费视频| 免费观看激色视频网站bd| 日韩免费一级毛片| 黑人大战亚洲人精品一区| 亚洲麻豆精品果冻传媒| 亚洲精品国产综合久久久久紧| 一本大道一卡二大卡三卡免费| 99re这里有免费视频精品 | 中国一级特黄的片子免费 |