資源描述:
《MQSeries 連環(huán)畫(huà)》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、MQSeries連環(huán)畫(huà)謹(jǐn)以此文獻(xiàn)給那些對(duì)MQSeries感興趣的朋友,取名“MQSeries連環(huán)畫(huà)“。1。在早先的時(shí)候,人們往往使用兩個(gè)程序之間直接通信的方式。這種辦法最大的問(wèn)題就是通信協(xié)議相關(guān)性,也就是說(shuō)與通信協(xié)議相關(guān)的代碼充斥在應(yīng)用程序之中,而且可能出現(xiàn)在程序的任何地方,甚至影響程序的設(shè)計(jì)與結(jié)構(gòu)。這種辦法的另一個(gè)問(wèn)題就是應(yīng)用程序不容易寫(xiě)出可靠強(qiáng)壯的代碼。應(yīng)用程序的通信部分會(huì)因?yàn)楣ぷ鞣绞降撵`活性、網(wǎng)絡(luò)協(xié)議的通用性,以及為實(shí)現(xiàn)一些實(shí)用功能變得非常龐大,往往超過(guò)應(yīng)用程序本身的邏輯代碼,變得本末倒置,且代碼很難寫(xiě)好,也很難維護(hù)。2。人們
2、開(kāi)始意識(shí)到應(yīng)該把通信代碼放到外面,變成獨(dú)立的工作進(jìn)程或工作模塊,不同的工作進(jìn)程可以適同于不同的通信協(xié)議,而應(yīng)用程序與通信程序之間使用通用的本地通信方式。這樣一來(lái),應(yīng)用程序與通信程序的代碼完全分開(kāi),各自的邏輯清晰自然,易于管理與維護(hù),在通信方式上前進(jìn)了一大步。但是,這種方式對(duì)通信程序的編程要求比較高,如果考慮到平臺(tái)的廣泛適用性,通信程序可能要寫(xiě)一大堆,要設(shè)計(jì)一個(gè)通用高效的本地通信接口也非易事,再考慮到通信上的一些附加功能,其實(shí)現(xiàn)對(duì)普通編程人員是有一定困難的。人們很自然地想到,這種工作最好交由專(zhuān)業(yè)的通信軟件來(lái)完成。在這種情況下,市場(chǎng)逐漸
3、出現(xiàn)了專(zhuān)門(mén)負(fù)責(zé)消息通信的軟件,其中IBMMQSeries是其中起步較早,功能出眾的一款。經(jīng)過(guò)多年的“大浪淘沙“,目前市場(chǎng)上MQSeries終于成為優(yōu)勢(shì)產(chǎn)品,占有率在70%以上,在同類(lèi)產(chǎn)品中,MicrosoftMSMQ與BEA的TuxedoQ也是不錯(cuò)的產(chǎn)品。MQSeries利用內(nèi)部的消息排隊(duì)與調(diào)度機(jī)制將應(yīng)用程序之間的通信的“活兒“全包了。目前支持超過(guò)23種平臺(tái),基本可以實(shí)現(xiàn)任何兩種異構(gòu)平臺(tái)之間的互連。在消息傳遞的過(guò)程中,本地應(yīng)用發(fā)送消息,通過(guò)MQSeries界面MQI(MQSeriesInterface)在消息頭中會(huì)加入消息路由信息,
4、這條消息放入本地傳輸隊(duì)列。消息通道協(xié)議MCP(MessageChannelProtocol)使用合適的通信協(xié)議將消息送達(dá)遠(yuǎn)端。另一方面,消息送達(dá)遠(yuǎn)端后會(huì)被遠(yuǎn)端MQSeries系統(tǒng)識(shí)別,并根據(jù)路由信息存入相應(yīng)的遠(yuǎn)程目標(biāo)隊(duì)列中,遠(yuǎn)端的應(yīng)用就這樣輕而易舉地通過(guò)MQI操作在家門(mén)口讀到可能是來(lái)自大洋彼岸的消息。消息分成兩部分--消息數(shù)據(jù)頭和應(yīng)用數(shù)據(jù)體:?消息數(shù)據(jù)頭:包含了消息在傳送中的必要信息,如目標(biāo)隊(duì)列管理器的名字,目標(biāo)隊(duì)列的名字,以及消息的一些屬性。?應(yīng)用數(shù)據(jù)體:包含了應(yīng)用程序有用的信息。隊(duì)列按其定義可分成本地隊(duì)列,遠(yuǎn)程隊(duì)列定義,別名隊(duì)列
5、定義。其中只有本地隊(duì)列是真正意義上的隊(duì)列,遠(yuǎn)程隊(duì)列定義和別名隊(duì)列定義只是一個(gè)隊(duì)列定義,指向另一個(gè)隊(duì)列實(shí)體。本地隊(duì)列按功能又可分成初始化隊(duì)列,傳輸隊(duì)列,目標(biāo)隊(duì)列和死信隊(duì)列。初始化隊(duì)列用做消息觸發(fā)功能。傳輸隊(duì)列只是暫存待傳的消息,在條件許可的情況下,通過(guò)管道將消息傳送其它的隊(duì)列管理器。目標(biāo)隊(duì)列是消息的目的地,可以長(zhǎng)期存放消息。如果消息不能送達(dá)目標(biāo)隊(duì)列,也不能再路由出去,則被自動(dòng)放入死信隊(duì)列保存。在MQSeries中應(yīng)用程序可以用消息觸發(fā)的方式啟動(dòng)。應(yīng)用程序A將請(qǐng)求消息放入本地隊(duì)列后,由于本地隊(duì)列配有觸發(fā)開(kāi)關(guān)指向某過(guò)程對(duì)象,該過(guò)程對(duì)象含有
6、應(yīng)用程序B的路徑。當(dāng)觸發(fā)條件滿(mǎn)足時(shí),MQSeries會(huì)根據(jù)過(guò)程對(duì)象自動(dòng)產(chǎn)生一條通知消息,放入初始化隊(duì)列。這條通知消息會(huì)被觸發(fā)監(jiān)聽(tīng)器(可以用系統(tǒng)提供的,也可以自己編寫(xiě))讀到,進(jìn)而啟動(dòng)應(yīng)用程序B。這時(shí),通知消息已經(jīng)從初始化隊(duì)列中取走,而原先的請(qǐng)求消息仍在本地隊(duì)列中,所以,一般說(shuō)來(lái),應(yīng)用程序B的工作模式應(yīng)該是從本地隊(duì)列中取出請(qǐng)求消息并作相應(yīng)的處理。MQSeries支持通用的數(shù)據(jù)庫(kù),如DB2,Oracle,Sybase,RDB和Ingres。通過(guò)MQSeries,我們可以做到前臺(tái)數(shù)據(jù)庫(kù)和后臺(tái)數(shù)據(jù)庫(kù)的一致更新。例如:應(yīng)用更新了本地的Sybas
7、e數(shù)據(jù)庫(kù),它同時(shí)將更新消息異步地傳送到后臺(tái),由后臺(tái)的應(yīng)用更新后臺(tái)的DB2數(shù)據(jù)庫(kù)。由于任何原因(如線(xiàn)路問(wèn)題),消息不能送達(dá),MQSeries都會(huì)自動(dòng)重試。如果在設(shè)定的超時(shí)重試次數(shù)內(nèi)仍未成功,如果這時(shí)本地Sybase數(shù)據(jù)庫(kù)尚未提交,MQSeries會(huì)將本地的數(shù)據(jù)庫(kù)操作回滾,以保持前后臺(tái)的一致。如果本地Sybase數(shù)據(jù)庫(kù)已經(jīng)提交,消息會(huì)保留在MQSeries中,它的送達(dá)保證機(jī)制會(huì)自動(dòng)在線(xiàn)路恢復(fù)的第一時(shí)間將消息送到后臺(tái),從而更新后臺(tái)的DB2數(shù)據(jù)庫(kù)。就這樣,MQSeries保證了所有對(duì)Sybase的操作也會(huì)同樣地作用于DB2。由前后端的應(yīng)用保
8、證各自交易的一致性,由MQSeries保證兩端的數(shù)據(jù)傳輸。在前端,可以保證發(fā)送消息與數(shù)據(jù)庫(kù)更新作為一個(gè)交易執(zhí)行,在后端可以保證讀取消息與數(shù)據(jù)庫(kù)更新也作為一個(gè)交易執(zhí)行。這樣,通過(guò)分段聯(lián)保,確保了整個(gè)業(yè)務(wù)的完整一致。所謂“用戶(hù)出口”實(shí)際上