轉(zhuǎn)自: http://hi.baidu.com/lubezhang/blog/item/bd308b3b7ecce3ec14cecb4f.html
IBM MQ(IBM Message Queue)是IBM的一款商業(yè)消息中間產(chǎn)品,適用于分布式計(jì)算環(huán)境或異構(gòu)系統(tǒng)之中。消息隊(duì)列技術(shù)是分布式應(yīng)用間交換信息的一種技術(shù)。消息隊(duì)列可駐留在內(nèi)存或磁盤上,隊(duì)列存儲(chǔ)消息直到它們被應(yīng)用程序讀走。通過(guò)消息隊(duì)列,應(yīng)用程序可獨(dú)立地執(zhí)行--它們不需要知道彼此的位置、或在繼續(xù)執(zhí)行前不需要等待接收程序接收此消息。
MQ基本概念
1、對(duì)列管理器
???? 隊(duì)列管理器是MQ系統(tǒng)中最上層的一個(gè)概念,由它為我們提供基于隊(duì)列的消息服務(wù)。
2、消息
???? 在MQ中,我們把應(yīng)用程序交由MQ傳輸?shù)臄?shù)據(jù)定義為消息,我們可以定義消息的內(nèi)容并對(duì)消息進(jìn)行廣義的理解,比如:用戶的各種類型的數(shù)據(jù)文件,某個(gè)應(yīng)用向其它應(yīng)用發(fā)出的處理請(qǐng)求等都可以作為消息。消息有兩部分組成:消息描述符(Message Discription或Message Header),描述消息的特征,如:消息的優(yōu)先級(jí)、生命周期、消息Id等;消 息體(Message Body),即用戶數(shù)據(jù)部分。在MQ中,消息分為兩種類型,非永久性(non-persistent)消息和永久性(persistent)消息,非永久 性消息是存儲(chǔ)在內(nèi)存中的,它是為了提高性能而設(shè)計(jì)的,當(dāng)系統(tǒng)掉電或MQ隊(duì)列管理器重新啟動(dòng)時(shí),將不可恢復(fù)。當(dāng)用戶對(duì)消息的可靠性要求不高,而側(cè)重系統(tǒng)的性 能表現(xiàn)時(shí),可以采用該種類型的消息,如:當(dāng)發(fā)布股票信息時(shí),由于股票信息是不斷更新的,我們可能每若干秒就會(huì)發(fā)布一次,新的消息會(huì)不斷覆蓋舊的消息。永久 性消息是存儲(chǔ)在硬盤上,并且紀(jì)錄數(shù)據(jù)日志的,它具有高可靠性,在網(wǎng)絡(luò)和系統(tǒng)發(fā)生故障等情況下都能確保消息不丟、不重。
?????? 此外,在MQ中,還有邏輯消息和物理消息的概念。利用邏輯消息和物理消息,我們可以將大消息進(jìn)行分段處理,也可以將若干個(gè)本身完整的消息在應(yīng)用邏輯上歸為一組進(jìn)行處理。
3、對(duì)列
???? 隊(duì)列是消息的安全存放地,隊(duì)列存儲(chǔ)消息直到它被應(yīng)用程序處理。
消息隊(duì)列以下述方式工作:
a) 程序A形成對(duì)消息隊(duì)列系統(tǒng)的調(diào)用,此調(diào)用告知消息隊(duì)列系統(tǒng),消息準(zhǔn)備好了投向程序B;
b) 消息隊(duì)列系統(tǒng)發(fā)送此消息到程序B駐留處的系統(tǒng),并將它放到程序B的隊(duì)列中;
c) 適當(dāng)時(shí)間后,程序B從它的隊(duì)列中讀此消息,并處理此信息。
由于采用了先進(jìn)的程序設(shè)計(jì)思想以及內(nèi)部工作機(jī)制,MQ能夠在各種網(wǎng)絡(luò)條件下保證消息的可靠傳遞,可以克服網(wǎng)絡(luò)線路質(zhì)量差或不穩(wěn)定的現(xiàn)狀,在傳輸過(guò)程中,如果 通信線路出現(xiàn)故障或遠(yuǎn)端的主機(jī)發(fā)生故障,本地的應(yīng)用程序都不會(huì)受到影響,可以繼續(xù)發(fā)送數(shù)據(jù),而無(wú)需等待網(wǎng)絡(luò)故障恢復(fù)或遠(yuǎn)端主機(jī)正常后再重新運(yùn)行。
????? 在MQ中,隊(duì)列分為很多種類型,其中包括:本地隊(duì)列、遠(yuǎn)程隊(duì)列、模板隊(duì)列、動(dòng)態(tài)隊(duì)列、別名隊(duì)列等。本地隊(duì)列又分為普通本地隊(duì)列和傳輸隊(duì)列,普通本地隊(duì)列是應(yīng)用程序通過(guò)API對(duì)其進(jìn)行讀寫操作的隊(duì)列;傳輸隊(duì)列可以理解為存儲(chǔ)-轉(zhuǎn)發(fā)隊(duì)列,比如:我們將某個(gè)消 息交給MQ系統(tǒng)發(fā)送到遠(yuǎn)程主機(jī),而此時(shí)網(wǎng)絡(luò)發(fā)生故障,MQ將把消息放在傳輸隊(duì)列中暫存,當(dāng)網(wǎng)絡(luò)恢復(fù)時(shí),再發(fā)往遠(yuǎn)端目的地。遠(yuǎn)程隊(duì)列是目的隊(duì)列在本地的定義,它類似一個(gè)地址指針,指向遠(yuǎn)程主機(jī)上的某個(gè)目的隊(duì)列,它僅僅是個(gè)定義,不真正占用磁盤存儲(chǔ)空間。模 板隊(duì)列和動(dòng)態(tài)隊(duì)列是MQ的一個(gè)特色,它的一個(gè)典型用途是用作系統(tǒng)的可擴(kuò)展性考慮。我們可以創(chuàng)建一個(gè)模板隊(duì)列,當(dāng)今后需要新增隊(duì)列時(shí),每打開一個(gè)模板隊(duì) 列,MQ便會(huì)自動(dòng)生成一個(gè)動(dòng)態(tài)隊(duì)列,我們還可以指定該動(dòng)態(tài)隊(duì)列為臨時(shí)隊(duì)列或者是永久隊(duì)列,若為臨時(shí)隊(duì)列我們可以在關(guān)閉它的同時(shí)將它刪除,相反,若為永久隊(duì) 列,我們可以將它永久保留,為我所用。
4、通道
???? 通道是MQ系統(tǒng)中隊(duì)列管理器之間傳遞消息的管道,它是建立在物理的網(wǎng)絡(luò)連接之上的一個(gè)邏輯概念,也是MQ產(chǎn)品的精華。在 MQ中,主要有三大類通道類型,即消息通道,MQI通道和Cluster通道。消息通道是用于在MQ的服務(wù)器和服務(wù)器之間傳輸消息的,需要強(qiáng)調(diào)指出的是, 該通道是單向的,它又有發(fā)送(sender), 接收(receive), 請(qǐng)求者(requestor), 服務(wù)者(server)等不同類型,供用戶在不同情況下使用。MQI通道是MQ Client和MQ Server之間通訊和傳輸消息用的,與消息通道不同,它的傳輸是雙向的。群集(Cluster)通道是位于同一個(gè)MQ 群集內(nèi)部的隊(duì)列管理器之間通訊使用的。
MQ工作原理
?
如圖所示:
首先來(lái)看本地通訊的情況,應(yīng)用程序A和應(yīng)用程序B運(yùn)行于同一系統(tǒng)A,它們之間可以借助消息隊(duì)列技術(shù)進(jìn)行彼此的通訊:應(yīng)用程序A向隊(duì)列1發(fā)送一條信息,而當(dāng)應(yīng)用程序B需要時(shí)就可以得到該信息。
其 次是遠(yuǎn)程通訊的情況,如果信息傳輸?shù)哪繕?biāo)改為在系統(tǒng)B上的應(yīng)用程序C,這種變化不會(huì)對(duì)應(yīng)用程序A產(chǎn)生影響,應(yīng)用程序A向隊(duì)列2發(fā)送一條信息,系統(tǒng)A的MQ 發(fā)現(xiàn)Q2所指向的目的隊(duì)列實(shí)際上位于系統(tǒng)B,它將信息放到本地的一個(gè)特殊隊(duì)列-傳輸隊(duì)列(Transmission Queue)。我們建立一條從系統(tǒng)A到系統(tǒng)B的消息通道,消息通道代理將從傳輸隊(duì)列中讀取消息,并傳遞這條信息到系統(tǒng)B,然后等待確認(rèn)。只有MQ接到系統(tǒng) B成功收到信息的確認(rèn)之后,它才從傳輸隊(duì)列中真正將該信息刪除。如果通訊線路不通,或系統(tǒng)B不在運(yùn)行,信息會(huì)留在傳輸隊(duì)列中,直到被成功地傳送到目的地。 這是MQ最基本而最重要的技術(shù)--確保信息傳輸,并且是一次且僅一次(once-and-only-once)的傳遞。
MQ提供了用于應(yīng)用集成的松耦合的連接方法,因?yàn)楣蚕硇畔⒌膽?yīng)用不需要知道彼此物理位置(網(wǎng)絡(luò)地址);不需要知道彼此間怎樣建立通信;不需要同時(shí)處于運(yùn)行狀態(tài);不需要在同樣的操作系統(tǒng)或網(wǎng)絡(luò)環(huán)境下運(yùn)行。
<!--EndFragment-->
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
