本篇內(nèi)容介紹了“MQ的基本概念”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供白朗企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、小程序制作等業(yè)務(wù)。10年已為白朗眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。
WebSphereMQ對(duì)象是一種由WebSphereMQ管理的具有可恢復(fù)能力的資源。
隊(duì)列管理器(Queue managers)
隊(duì)列(Queues)
名字列表(Namelists)
分發(fā)列表(Distribution lists)
進(jìn)程定義(Process definitions)
通道(Channels)
存儲(chǔ)類(Storage classes)
這些對(duì)象在異種平臺(tái)上都是統(tǒng)一的。對(duì)于系統(tǒng)管理員來(lái)說(shuō),操縱對(duì)象的命令都是可用的。這些命令格式,對(duì)于不同平臺(tái)是有區(qū)別的。當(dāng)你創(chuàng)建隊(duì)列管理器時(shí),會(huì)自動(dòng)地創(chuàng)建缺省對(duì)象。這些缺省對(duì)象可以幫助您來(lái)定義所需的對(duì)象。
每一個(gè)對(duì)象都有一個(gè)名字,以便通過(guò)命令和MQI調(diào)用可以引用它。通常在這些對(duì)象類型中的每一種對(duì)象的名字必須唯一。例如,一個(gè)隊(duì)列和一個(gè)進(jìn)程的名字可以相同,但是不可以有兩個(gè)相同名字的隊(duì)列。這意味著一個(gè)本地隊(duì)列名不能和模板隊(duì)列、遠(yuǎn)程隊(duì)列或別名隊(duì)列相同。但是也會(huì)有些特殊情況。另外在互連的隊(duì)列管理器網(wǎng)絡(luò)中,隊(duì)列管理器名必須唯一。
WebSphereMQ的對(duì)象名是大小寫敏感的,因此在定義對(duì)象時(shí),需要仔細(xì)選擇好大小寫字母。在 WebSphere MQ 中,除最多有 20 個(gè)字符的通道之外,名稱最多可以有 48 個(gè)字符。
消息
WebSphereMQ定義了四種基本類型的消息。應(yīng)用程序可以定義其他類型的消息。四種基本類型是:
1.請(qǐng)求消息 Request message
請(qǐng)求消息需要應(yīng)答。從客戶端發(fā)往服務(wù)器的查詢和更新信息往往是一條請(qǐng)求消息。請(qǐng)求消息中應(yīng)該包含回復(fù)消息的路由信息,即回復(fù)消息發(fā)往什么地方。
2. 回復(fù)消息 Reply message
回復(fù)消息是對(duì)請(qǐng)求消息的回應(yīng)。請(qǐng)求消息中的信息決定了回應(yīng)消息的目的地。處理請(qǐng)求和回應(yīng)的應(yīng)用程序控制著消息間的關(guān)聯(lián),這種關(guān)聯(lián)和隊(duì)列管理器沒(méi)有關(guān)系。消息自身帶有足夠的信息供應(yīng)用程序?qū)崿F(xiàn)這種關(guān)聯(lián)。
3.報(bào)文消息 Datagram message
數(shù)據(jù)報(bào)消息是不需要回復(fù)的消息,報(bào)文消息只是一次單向的信息傳送。
4.報(bào)告消息 Report message。
報(bào)告消息用于對(duì)一些系統(tǒng)故障的響應(yīng)。有些報(bào)告消息是由應(yīng)用程序創(chuàng)建的,有些報(bào)告消息是由隊(duì)列管理器創(chuàng)建的。后一種情況是由于遠(yuǎn)程隊(duì)列已經(jīng)滿或者遠(yuǎn)程隊(duì)列不存在引起消息不能正確發(fā)送。最初發(fā)送者條消息的應(yīng)用程序不能檢測(cè)到這種錯(cuò)誤,只有等遠(yuǎn)程隊(duì)列管理器創(chuàng)建了這樣一條報(bào)告消息并發(fā)往本地隊(duì)列管理器之后,應(yīng)用程序才能作相應(yīng)的處理。
隊(duì)列管理器把報(bào)告消息也用于其他目的,比如報(bào)告一些事件。消息可能有一個(gè)失效時(shí)間限制。如果一條消息在失效時(shí)間過(guò)后還沒(méi)有被某個(gè)應(yīng)用程序處理,該條消息將被隊(duì)列管理器從系統(tǒng)中清除。當(dāng)隊(duì)列管理器清除一條失效消息之后,它將創(chuàng)建一條報(bào)告消息,這條報(bào)告消息的目的地址由失效消息提供。
報(bào)告消息的另一個(gè)用途是確保消息的到達(dá)。應(yīng)用程序可以要求它們所發(fā)送的消息到達(dá)目的地后,他們收到一條報(bào)告消息,這叫做接收確認(rèn)(Confirmation of arrival)。與此相類似,應(yīng)用程序也可以要求當(dāng)另外一個(gè)程序取走這條消息時(shí)它們收到一條報(bào)告消息,這被叫做交付確認(rèn)(Confirmation of delivery)。這兩種情況,都是由隊(duì)列管理器創(chuàng)建報(bào)告消息,并把報(bào)告消息發(fā)送到適當(dāng)?shù)啬康牡亍?/p>
另外還一類特殊的消息叫觸發(fā)消息。觸發(fā)消息是由隊(duì)列管理器創(chuàng)建的一類特殊消息。WebSphere MQ的隊(duì)列管理器提供了一種當(dāng)滿足某一條件時(shí),自動(dòng)觸發(fā)應(yīng)用程序的機(jī)制,而觸發(fā)消息是觸發(fā)機(jī)制的重要組成部分。
應(yīng)用程序也可以定義新的消息類型。隊(duì)列管理器不能解釋這些類型,應(yīng)用程序設(shè)置的消息類型由一個(gè)范圍。這些類型值可用來(lái)區(qū)分不同類型的應(yīng)用程序在同一個(gè)輸入隊(duì)列中放入的消息。
最大消息長(zhǎng)度為 100 MB(其中 1 MB 等于 1 048 576 字節(jié)),缺省最大消息長(zhǎng)度是 4 MB。實(shí)際上,消息長(zhǎng)度受以下方面的影響:
接收隊(duì)列定義的最大消息長(zhǎng)度
隊(duì)列管理器定義的最大消息長(zhǎng)度
傳輸隊(duì)列定義的最大消息長(zhǎng)度
發(fā)送或接收應(yīng)用程序定義的最大消息長(zhǎng)度
存儲(chǔ)消息的可用空間
所以有時(shí)可能需要由多個(gè)消息組成的信息才能滿足應(yīng)用程序的要求。
應(yīng)用程序使用 MQI 調(diào)用來(lái)實(shí)現(xiàn)發(fā)送和接收消息。
例如,要將消息放入隊(duì)列,應(yīng)用程序:
通過(guò)發(fā)出 MQI MQOPEN調(diào)用打開(kāi)所需的隊(duì)列
發(fā)出 MQI MQPUT調(diào)用以將消息放入隊(duì)列
另一個(gè)應(yīng)用程序可以通過(guò)發(fā)出MQI MQGET調(diào)用,從同一隊(duì)列取出消息
隊(duì)列
按創(chuàng)建方法分類
預(yù)定義隊(duì)列由管理員使用相應(yīng)的 MQSC 或 PCF 命令創(chuàng)建。 預(yù)定義隊(duì)列是永久的;它們的存在與應(yīng)用程序是否實(shí)用它們無(wú)關(guān),并且 WebSphere MQ 重新啟動(dòng)后繼續(xù)存在。
動(dòng)態(tài)隊(duì)列在應(yīng)用程序發(fā)出設(shè)定模型隊(duì)列名的MQOPEN調(diào)用時(shí)創(chuàng)建的。被創(chuàng)建的隊(duì)列是基于一個(gè)模板隊(duì)列。 您可以使用 MQSC 命令 DEFINE QMODEL 創(chuàng)建模板隊(duì)列。動(dòng)態(tài)隊(duì)列繼承了模板隊(duì)列的屬性。模板隊(duì)列有一個(gè)屬性可以說(shuō)明動(dòng)態(tài)隊(duì)列是永久的還是臨時(shí)的。永久隊(duì)列在應(yīng)用程序和隊(duì)列管理器重新啟動(dòng)后繼續(xù)存在;臨時(shí)隊(duì)列在重新啟動(dòng)后消失。
按功能分類
1. 本地隊(duì)列(local queue):
一個(gè)本地隊(duì)列是一個(gè)物理上位于本地隊(duì)列管理器中的隊(duì)列。本地隊(duì)列實(shí)際上存在與本地系統(tǒng)的內(nèi)存或磁盤存儲(chǔ)終。本地隊(duì)列管理器控制隊(duì)列的訪問(wèn)。
應(yīng)用程序可以“PUT”消息到本地隊(duì)列,也可以從本地隊(duì)列“GET”消息,另外程序還可以查詢或修改這些隊(duì)列的某些屬性。對(duì)隊(duì)列屬性的修改需要相應(yīng)的權(quán)限。
2. 遠(yuǎn)程隊(duì)列(remote queue):
一個(gè)遠(yuǎn)程隊(duì)列屬于一個(gè)不與該應(yīng)用程序直接相連的隊(duì)列管理器。對(duì)這類隊(duì)列的訪問(wèn)包含有本地隊(duì)列管理器和遠(yuǎn)程隊(duì)列管理器的通信過(guò)程。這種通信涉及到通道。
應(yīng)用程序可對(duì)遠(yuǎn)程隊(duì)列進(jìn)行某些操作,比如程序可以向一個(gè)遠(yuǎn)程隊(duì)列放一條消息,但程序不能從遠(yuǎn)程隊(duì)列中去消息。應(yīng)用程序只能從本地隊(duì)列讀取消息。
應(yīng)用程序有兩種不同的方法可用來(lái)訪問(wèn)遠(yuǎn)程隊(duì)列。第一種是當(dāng)程序打開(kāi)一個(gè)遠(yuǎn)程隊(duì)列時(shí)同時(shí)提供隊(duì)列管理器名和隊(duì)列名兩個(gè)參數(shù)。這要求程序知道目的隊(duì)列屬于哪個(gè)隊(duì)列管理器。第二種方法是在本地隊(duì)列管理器上存在一個(gè)遠(yuǎn)程隊(duì)列的定義,這個(gè)定義包含有足夠的信息讓本地隊(duì)列管理器確定該遠(yuǎn)程隊(duì)列所在的隊(duì)列管理器。
遠(yuǎn)程隊(duì)列定義中的目的隊(duì)列不一定是遠(yuǎn)程隊(duì)列管理器的本地隊(duì)列,它也可以是一個(gè)遠(yuǎn)程隊(duì)列定義
應(yīng)用程序放一條消息到Q1,Q1是本地隊(duì)列管理器QM1上的一個(gè)遠(yuǎn)程隊(duì)列定義:Q2at QM2。QM2是遠(yuǎn)程隊(duì)列管理器。Q2是QM2上的一個(gè)遠(yuǎn)程隊(duì)列定義Q3 at QM3。Q3是QM3的一個(gè)本地隊(duì)列,經(jīng)過(guò)兩次傳送,消息最終到達(dá)Q3這個(gè)QM3的本地隊(duì)列。
有多種原因使這種多跳(Multihop)傳送變得有意義。在一個(gè)TCP/IP網(wǎng)絡(luò)內(nèi)部,所有機(jī)器都有IP地址,IP協(xié)議本身處理節(jié)點(diǎn)間的路由選擇。但假設(shè)消息需要穿過(guò)不同類型的網(wǎng)絡(luò),這就需要中間件參加路由選擇。在圖中,QM2位于一臺(tái)連接TCP/IP網(wǎng)和SNA網(wǎng)的機(jī)器上,只需在QM2上提供一個(gè)遠(yuǎn)程隊(duì)列定義Q2:Q3 at QM3,就可以實(shí)現(xiàn)消息的跨網(wǎng)絡(luò)傳輸。
因?yàn)閷?duì)遠(yuǎn)程隊(duì)列的訪問(wèn)總是涉及到隊(duì)列管理器之間的通信,因而我們需要定義其他一些資源,比如通道、傳輸隊(duì)列(Transmission queue)。
3. 傳輸隊(duì)列(Transmission queue):
傳輸隊(duì)列是臨時(shí)存儲(chǔ)目標(biāo)為遠(yuǎn)程隊(duì)列管理器的消息的隊(duì)列。隊(duì)列管理器利用傳輸隊(duì)列把消息分階段地發(fā)向遠(yuǎn)程隊(duì)列。隊(duì)列管理器和消息移動(dòng)程序一起負(fù)責(zé)把數(shù)據(jù)傳送到遠(yuǎn)程隊(duì)列。當(dāng)隊(duì)列管理器收到把一條消息發(fā)往遠(yuǎn)程隊(duì)列的要求后,它把消息發(fā)送到一個(gè)與目的隊(duì)列管理器相關(guān)聯(lián)的傳輸隊(duì)列,傳輸隊(duì)列位于本地隊(duì)列管理器上。目的隊(duì)列管理器的名稱可能由應(yīng)用程序提供,也可以從遠(yuǎn)程隊(duì)列定義中得到。
一個(gè)傳輸隊(duì)列是兩個(gè)隊(duì)列管理器之間的連接的一端。所有直接目的地是同一隊(duì)列管理器的消息都可放在同一個(gè)傳輸隊(duì)列上,這些消息的最終目的可能不一樣。把消息從一個(gè)隊(duì)列管理器傳送到另一個(gè)隊(duì)列管理器只需要一個(gè)傳輸隊(duì)列,然而也有可能在兩個(gè)隊(duì)列管理器之間存在著多個(gè)連接以提供不同的傳輸服務(wù),每個(gè)連接都帶有一個(gè)不同的傳輸隊(duì)列。
傳輸隊(duì)列是由MCA處理的,MCA負(fù)責(zé)在隊(duì)列管理器之間可靠地傳送消息。MCA實(shí)際上是處理傳輸隊(duì)列上消息的MQI應(yīng)用程序。
4. 動(dòng)態(tài)隊(duì)列和模板隊(duì)列:
除了有固定定義的隊(duì)列之外,WebSphere MQ還為程序在它們執(zhí)行時(shí)提供了動(dòng)態(tài)地創(chuàng)建隊(duì)列的能力。例如,一個(gè)應(yīng)用程序作為某種服務(wù)的客戶,它可能創(chuàng)建一個(gè)動(dòng)態(tài)隊(duì)列,并通知服務(wù)器把對(duì)服務(wù)要求的響應(yīng)發(fā)送到該動(dòng)態(tài)隊(duì)列。當(dāng)然,這種情況也可以使用具有永久定義的隊(duì)列。為了簡(jiǎn)化在創(chuàng)建動(dòng)態(tài)隊(duì)列時(shí)所必需設(shè)置的許多參數(shù),動(dòng)態(tài)隊(duì)列總是基于模板隊(duì)列被創(chuàng)建的,模板隊(duì)列定義了動(dòng)態(tài)隊(duì)列的所有屬性。當(dāng)應(yīng)用程序試圖打開(kāi)一個(gè)模板隊(duì)列時(shí),WebSphere MQ就創(chuàng)建一個(gè)動(dòng)態(tài)隊(duì)列。WebSphere MQ為應(yīng)用提供了系統(tǒng)模板隊(duì)列。
動(dòng)態(tài)隊(duì)列也可以分成兩種,它們的生存周期和故障恢復(fù)特性不同。在創(chuàng)建臨時(shí)動(dòng)態(tài)隊(duì)列(Temorary dynamic queue)的應(yīng)用程序關(guān)閉時(shí),這些隊(duì)列將被刪除,隊(duì)列上的消息將丟失。這類動(dòng)態(tài)隊(duì)列不支持消息的持久性。如果隊(duì)列管理器發(fā)生故障重新啟動(dòng),臨時(shí)動(dòng)態(tài)隊(duì)列也不會(huì)被恢復(fù)。另一種動(dòng)態(tài)隊(duì)列是持久動(dòng)態(tài)隊(duì)列(Permanent dynamic queue)。只有當(dāng)一個(gè)應(yīng)用程序關(guān)閉持久動(dòng)態(tài)隊(duì)列時(shí)定義刪除選項(xiàng),持久動(dòng)態(tài)隊(duì)列才會(huì)被刪除。刪除持久動(dòng)態(tài)隊(duì)列的程序不一定是創(chuàng)建持久動(dòng)態(tài)隊(duì)列的程序,持久動(dòng)態(tài)隊(duì)列在隊(duì)列管理器重啟后會(huì)被恢復(fù),并且支持具有持久性的消息。
5. 啟動(dòng)隊(duì)列
啟動(dòng)隊(duì)列是在觸發(fā)中使用的隊(duì)列。如果隊(duì)列管理器將使用觸發(fā),則必須至少為此隊(duì)列管理器定義一個(gè)啟動(dòng)隊(duì)列。隊(duì)列管理器在觸發(fā)器事件發(fā)生時(shí)將觸發(fā)器消息放入啟動(dòng)隊(duì)列。觸發(fā)器事件是由隊(duì)列管理器檢測(cè)的條件的邏輯組合。例如,當(dāng)隊(duì)列上的消息數(shù)達(dá)到預(yù)定義深度時(shí),可能會(huì)生成觸發(fā)器事件。此事件使隊(duì)列管理器將觸發(fā)器消息放入指定的啟動(dòng)隊(duì)列。此觸發(fā)器消息由觸發(fā)器監(jiān)視器(即監(jiān)視啟動(dòng)隊(duì)列的特殊應(yīng)用程序)檢索。然后觸發(fā)器監(jiān)視器啟動(dòng)在觸發(fā)器消息中指定的應(yīng)用程序。
6. 群集傳輸隊(duì)列
每個(gè)在群集中的隊(duì)列管理器有一個(gè)稱為 SYSTEM.CLUSTER.TRANSMIT.QUEUE 的群集傳輸隊(duì)列。當(dāng)您定義隊(duì)列管理器時(shí),按缺省情況創(chuàng)建此隊(duì)列的定義。作為群集一部分的隊(duì)列管理器可以將群集傳輸隊(duì)列上的消息發(fā)送到在同一群集中的任何其它隊(duì)列管理器。 在路由解析期間,群集傳輸隊(duì)列優(yōu)先于缺省傳輸隊(duì)列。 當(dāng)隊(duì)列管理器是群集的一部分時(shí),缺省操作是使用 SYSTEM.CLUSTER.TRANSMIT.QUEUE,除非當(dāng)目標(biāo)隊(duì)列管理器不是此群集的一部分。
7. 死信隊(duì)列 (Dead letter queue)
死信(未傳遞的消息)隊(duì)列是存儲(chǔ)無(wú)法發(fā)送到其正確目的地的消息的隊(duì)列。有時(shí)候會(huì)出現(xiàn)隊(duì)列管理器不能把消息發(fā)送到目的地的情況,此時(shí)消息將被發(fā)送到某個(gè)死信隊(duì)列中。死信隊(duì)列中的消息常常暗示了系統(tǒng)可能出現(xiàn)的問(wèn)題。例如當(dāng)一條消息到達(dá)目的隊(duì)列管理器之后卻發(fā)現(xiàn)目的隊(duì)列并不存在?;蛘吣康年?duì)列出現(xiàn)不能接收信消息的情況,比如目的隊(duì)列已經(jīng)滿了,或者它被設(shè)置成不允許再加入新的消息。并不是所有的放消息操作的失敗都導(dǎo)致消息被放入死信隊(duì)列,例如,由于本地隊(duì)列出現(xiàn)錯(cuò)誤造成應(yīng)用程序不能“放”消息,此時(shí)MQI調(diào)用直接把錯(cuò)誤碼返回給應(yīng)用程序。
有些錯(cuò)誤只能由死信隊(duì)列報(bào)告,例如,一條消息穿越網(wǎng)絡(luò)之后到達(dá)目的隊(duì)列管理器,卻發(fā)現(xiàn)目的隊(duì)列已滿。發(fā)現(xiàn)錯(cuò)誤的機(jī)器不同于最初“放”消息應(yīng)用程序所在的機(jī)器,甚至可能放消息的應(yīng)用程序已不在運(yùn)行狀態(tài)。此時(shí)目的隊(duì)列管理器把這條消息發(fā)往它所擁有的死信隊(duì)列,而不是簡(jiǎn)單地扔掉該條消息。這樣使得這次錯(cuò)誤是可見(jiàn)的,也給應(yīng)用程序提供了一個(gè)改正錯(cuò)誤的機(jī)會(huì)。
死信隊(duì)列是WebSphere MQ面對(duì)遠(yuǎn)端系統(tǒng)錯(cuò)誤時(shí)的一種解決方案。應(yīng)用程序可以利用WebSphere MQ提供的其他一些工具來(lái)監(jiān)視并確保消息的可靠傳送和接收。
在隊(duì)列管理器創(chuàng)建時(shí),系統(tǒng)會(huì)缺省創(chuàng)建一個(gè)死信隊(duì)列,隊(duì)列名是SYSTEM.DEAD.LETTER.QUEUE。建議在生產(chǎn)系統(tǒng)上,需要獨(dú)立創(chuàng)建一個(gè)死信隊(duì)列,而不使用系統(tǒng)缺省的死信隊(duì)列。
8. 命令隊(duì)列
命令隊(duì)列 SYSTEM.ADMIN.COMMAND.QUEUE 是用來(lái)存放由應(yīng)用管理程序放的具有PCF(programcommand format)的消息的隊(duì)列。該隊(duì)列主要用于編寫管理程序時(shí)使用。具體的使用將在后續(xù)章節(jié)介紹。在創(chuàng)建隊(duì)列管理器時(shí)將為每個(gè)隊(duì)列管理器自動(dòng)創(chuàng)建命令隊(duì)列。
9. 回復(fù)隊(duì)列
當(dāng)應(yīng)用程序發(fā)送請(qǐng)求消息時(shí),接收消息的應(yīng)用程序可以將回復(fù)消息發(fā)送給發(fā)送應(yīng)用程序。此回復(fù)消息放入一個(gè)稱為回復(fù)隊(duì)列的隊(duì)列中,它通常是發(fā)送應(yīng)用程序的本地隊(duì)列?;貜?fù)隊(duì)列的名稱由作為消息描述符一部分的發(fā)送應(yīng)用程序指定。
10. 別名隊(duì)列
別名隊(duì)列實(shí)際上是本地隊(duì)列、遠(yuǎn)程隊(duì)列定義或隊(duì)列名表的另外一個(gè)名字。它是一種簡(jiǎn)單的名字到名字的映射,它允許應(yīng)用程序用另外一個(gè)名字來(lái)訪問(wèn)隊(duì)列。WebSphere MQ已經(jīng)為應(yīng)用程序屏蔽了許多底層系統(tǒng)細(xì)節(jié),特別是網(wǎng)絡(luò)通信的細(xì)節(jié),而別名隊(duì)列允許在不修改應(yīng)用程序的條件下訪問(wèn)其他名字的隊(duì)列。
在WebSphere MQ中隊(duì)列管理器是基本的軟件系統(tǒng),隊(duì)列管理器可看成是隊(duì)列和其他對(duì)象的容器。WebSphere MQ中的每一個(gè)隊(duì)列都屬于一個(gè)隊(duì)列管理器,隊(duì)列管理器是為應(yīng)用程序和WebSphere MQ部件(一些管理工具)提供對(duì)隊(duì)列管理中對(duì)象的訪問(wèn)。
一個(gè)隊(duì)列管理器是WebSphere MQ中的一個(gè)基本的獨(dú)立的執(zhí)行單元。一臺(tái)機(jī)器上可以運(yùn)行一個(gè)或多個(gè)隊(duì)列管理器。
任何需要訪問(wèn)WebSphere MQ提供的服務(wù)的應(yīng)用程序都必須先和隊(duì)列管理器相連,和應(yīng)用程序相連的隊(duì)列管理器對(duì)該應(yīng)用程序而言就叫“本地隊(duì)列管理器”(Local Queue Manager),本地隊(duì)列管理器為程序提供MQI調(diào)用的支持。應(yīng)用程序可以操作、管理本地隊(duì)列管理器所擁有的各種資源,也可以向其他的隊(duì)列管理器發(fā)送消息。
應(yīng)用程序通過(guò)一種叫做MQI的編程接口向隊(duì)列管理器申請(qǐng)服務(wù)。這些服務(wù)包括“放”一條消息到隊(duì)列或從隊(duì)列“取”一條消息等一些基本操作。隊(duì)列管理器還使隊(duì)列成為可靠的存儲(chǔ)消息的地方,它也控制安全性管理,并提供一些特殊的隊(duì)列功能,比如觸發(fā)隊(duì)列。
為了減少應(yīng)用程序?qū)τ谒\(yùn)行環(huán)境的依賴性,WebSphere MQ的應(yīng)用程序可以和一個(gè)它不知道名字的隊(duì)列管理器相連,這個(gè)隊(duì)列管理器就是一臺(tái)機(jī)器上的缺省隊(duì)列管理器。如果程序在調(diào)用MQCONN時(shí),把隊(duì)列管理器名參數(shù)設(shè)置為空,MQCONN將返回與缺省的隊(duì)列管理器連接的句柄。
隊(duì)列管理器擁有每個(gè)隊(duì)列。隊(duì)列管理器負(fù)責(zé)維護(hù)它所擁有的隊(duì)列,以及將它接收到的所有消息存儲(chǔ)到相應(yīng)的隊(duì)列??梢杂蓱?yīng)用程序或隊(duì)列管理器將消息放入隊(duì)列,這些是它的正常操作的一部分。
消息通道是一種提供從一個(gè)隊(duì)列管理器到另一個(gè)隊(duì)列管理器的通信路徑。消息通道用在分布式的隊(duì)列把消息從一個(gè)隊(duì)列管理器發(fā)送到另一個(gè)隊(duì)列管理器。它們使應(yīng)用程序屏蔽了底層的通信協(xié)議。隊(duì)列管理器可能存在同種或異種平臺(tái)之間。為了實(shí)現(xiàn)隊(duì)列管理器之間的通信,您必需在一個(gè)隊(duì)列管理器中定義一個(gè)發(fā)送消息的通道對(duì)象,在另一個(gè)隊(duì)列管理器中定義一個(gè)接收消息的通道對(duì)象。消息通道是一個(gè)單向鏈接。它通過(guò)消息通道代理(message channel agents)把兩個(gè)隊(duì)列管理器連接起來(lái)。
不要和MQI通道(MQI channel)通道混淆。MQI通道有兩種類型,分別是服務(wù)器連接(server-connection)和客戶器連接(client-connection)。
消息通道分類
消息通道的定義可以分為以下6種類型:
l 發(fā)送通道(Sender)
l 接收通道(Receiver)
l 服務(wù)器通道(Server)
l 請(qǐng)求器通道(Requester)
l 群集發(fā)送通道(Cluster sender)
l 群集接收通道(Cluster receiver)
消息通道的組合形式
如果要在隊(duì)列管理之間實(shí)現(xiàn)消息傳輸,必須要在兩個(gè)隊(duì)列管理器上都要定義相應(yīng)的通道。發(fā)送方和接收方通道的組合形式如下:
l 發(fā)送通道-接收通道(Sender-receiver )
l 請(qǐng)求器通道-服務(wù)器通道(Requester-server)
l 請(qǐng)求器通道-發(fā)送通道(Requester-sender (callback) )
l 服務(wù)器通道-接收通道(Server-receiver )
l 群集發(fā)送通道-群集接收通道(Cluster sender –cluster receiver)
注意:通道的組合形式有5種形式,每種組合方式是固定的,用戶不能隨意組合。每對(duì)通道的名稱必需相同例如:在發(fā)送通道-接收通道組合中,發(fā)送通道名和接收通道名必須一致,否則通道將無(wú)法啟動(dòng)。
消息通道用法 發(fā)送通道-接收通道(Sender-receiver)
用法:由一個(gè)系統(tǒng)的發(fā)送通道來(lái)啟動(dòng)通道,以便它可以發(fā)送消息到另一個(gè)系統(tǒng)。發(fā)送通道向接收通道發(fā)送啟動(dòng)請(qǐng)求。發(fā)送通道從傳輸隊(duì)列發(fā)送消息到接收通道。接收通道把消息放到目標(biāo)隊(duì)列。
請(qǐng)求器通道-服務(wù)器通道(Requester-server)
用法:
(1)由一個(gè)系統(tǒng)中的請(qǐng)求器通道來(lái)啟動(dòng)通道,以便它能從另一個(gè)系統(tǒng)接收到消息。 請(qǐng)求器通道向通道另一端的服務(wù)器通道發(fā)送請(qǐng)求來(lái)啟動(dòng)。服務(wù)器通道從傳輸隊(duì)列把消息發(fā)送到請(qǐng)求器通道。
(2) 服務(wù)器通道也能啟動(dòng)通道,并發(fā)送消息到請(qǐng)求器, 但這僅應(yīng)用于完全意義的服務(wù)器通道, 也即服務(wù)器通道定義中應(yīng)含有對(duì)方的連接名。一個(gè)完全意義的服務(wù)器通道可以由請(qǐng)求器通道啟動(dòng), 也可以發(fā)起和服務(wù)器通道的通訊。
(3) 最好不要手工去停止Server和Request通道,而是依靠Server通道的Discint的屬性來(lái)停止通道。
請(qǐng)求器通道-發(fā)送通道(Requester-sender (callback))
用法:請(qǐng)求器通道啟動(dòng)通道,發(fā)送通道終止這個(gè)會(huì)話。發(fā)送通道然后依據(jù)它的通道定義中的信息(稱為 callback)來(lái)重新啟動(dòng)會(huì)話。它把消息從傳輸隊(duì)列發(fā)送給請(qǐng)求器通道。最好不要手工去停止Sender和Request通道,而是依靠Sender 通道的Discint屬性來(lái)停止通道。
服務(wù)器通道-接收通道(Server-receiver)
用法:類似于發(fā)送通道-接收通道,但僅應(yīng)用在完全意義的服務(wù)器通道。也即服務(wù)器通道定義應(yīng)含有對(duì)方的連接名,通道的啟動(dòng)方是服務(wù)器通道。
群集發(fā)送通道(Cluster sender)
用法:在一個(gè)群集中,每個(gè)隊(duì)列管理器都有一個(gè)群集發(fā)送通道,通過(guò)它可以把送群集信息發(fā)送到其中一個(gè)隊(duì)列管理器資源管理器。隊(duì)列管理器通過(guò)這個(gè)通道也可以把消息發(fā)送到其他的隊(duì)列管理器。
群集接收通道(cluster receiver)
功能:在一個(gè)群集中,每一個(gè)隊(duì)列管理器都有一個(gè)群集接收通道。通過(guò)這個(gè)通道可以接收數(shù)據(jù)消息和關(guān)于群集的消息。
MQI通道是WebSphere MQ 客戶端和服務(wù)器上的隊(duì)列管理器的通信的通道。當(dāng)客戶端應(yīng)用程序發(fā)出MQCONN或MQCONNX調(diào)用時(shí),才開(kāi)始建立連接。它是一個(gè)雙向的通道,可以負(fù)責(zé)發(fā)送和接收,被用作MQI調(diào)用的傳送和響應(yīng)。
一個(gè)MQI通道可以把一個(gè)客戶端連接到單個(gè)隊(duì)列管理器,MQI通道有兩種類型,它們定義了雙向的MQI通道。
客戶端連接通道(Client-connectionchannel)
這種類型為WebSphereMQ 的客戶端所使用。
服務(wù)器連接通道(Server-connectionchannel)
這種類型為運(yùn)行隊(duì)列管理器的服務(wù)器端所使用,運(yùn)行在WebSphere MQ 客戶端的應(yīng)用程序?qū)⑹褂眠@種通道進(jìn)行通信。
消息通道與MQI通道之間的區(qū)別可以從兩方面進(jìn)行比較:
l MQI通道是雙向的:一個(gè)MQI通道可以被用來(lái)發(fā)送請(qǐng)求,也可用來(lái)接收響應(yīng)。而消息通道則只能單向數(shù)據(jù)通信。如果要在兩個(gè)隊(duì)列管理器之間實(shí)現(xiàn)雙向通信,那么需要定義兩個(gè)消息通道,一個(gè)用來(lái)實(shí)現(xiàn)數(shù)據(jù)的發(fā)送,另一個(gè)用來(lái)實(shí)現(xiàn)數(shù)據(jù)的接收。
l MQI通道的通信是同步的:當(dāng)一個(gè)MQI請(qǐng)求從客戶端發(fā)送服務(wù)器端時(shí),WebSphere MQ的客戶端在發(fā)送下一個(gè)請(qǐng)求之間必須要等待來(lái)自服務(wù)器端的響應(yīng)。而消息通道,在通道中傳輸?shù)南⑹桥c時(shí)間無(wú)關(guān)的。大量的消息可以從一個(gè)隊(duì)列管理器發(fā)送到另一個(gè)隊(duì)列管理器,發(fā)送隊(duì)列管理器不必等待來(lái)自接收隊(duì)列管理器的任何響應(yīng)。
進(jìn)程定義對(duì)象定義響應(yīng) WebSphere MQ 隊(duì)列管理器上的觸發(fā)器事件啟動(dòng)的應(yīng)用程序。進(jìn)程定義屬性包含應(yīng)用程序標(biāo)識(shí)、應(yīng)用程序類型和特定于應(yīng)用程序的數(shù)據(jù)。
在使用分布式排隊(duì)的傳統(tǒng) WebSphere MQ 網(wǎng)絡(luò)中,每個(gè)隊(duì)列管理器是獨(dú)立的。如果隊(duì)列管理器需要將消息發(fā)送到另一個(gè)隊(duì)列管理器,則它必須定義一個(gè)傳輸隊(duì)列、一個(gè)到遠(yuǎn)程隊(duì)列管理器的通道,以及它要將消息發(fā)送到的每個(gè)隊(duì)列的遠(yuǎn)程隊(duì)列定義。
群集是一組以隊(duì)列管理器可以在不需要傳輸隊(duì)列、通道和遠(yuǎn)程隊(duì)列定義的情況下在單個(gè)網(wǎng)絡(luò)上彼此直接通信的方法設(shè)置的隊(duì)列管理器。
名稱列表是包含其它 WebSphere MQ 對(duì)象列表的 WebSphere MQ 對(duì)象。通常,應(yīng)用程序(如觸發(fā)器監(jiān)視器)使用名稱列表,它們用于標(biāo)識(shí)一組隊(duì)列。使用名稱列表的優(yōu)點(diǎn)是它獨(dú)立于應(yīng)用程序維護(hù);可以在不停止任何使用它的應(yīng)用程序的情況下更新它。并且,如果一個(gè)應(yīng)用程序失敗,則名稱列表不受影響,其它應(yīng)用程序可以繼續(xù)使用它。
名稱列表還與隊(duì)列管理器群集一起使用,以維護(hù)多個(gè) WebSphere MQ 對(duì)象引用的群集列表。
隊(duì)列管理器認(rèn)證信息對(duì)象(AUTHINFO)組成安全套接字層(SSL)安全性的WebSphere MQ 支持的部件。它提供使用LDAP 服務(wù)器檢查證書撤銷列表(CRL)所需的定義。CRL 允許認(rèn)證中心取消不再可信的證書。
本書描述對(duì)認(rèn)證信息對(duì)象使用setmqaut、dspmqaut、dmpmqaut、rcrmqobj、rcdmqimg和 dspmqfls命令。有關(guān) SSL 概述以及 AUTHINFO 的使用,請(qǐng)參閱 WebSphere MQ Security。
系統(tǒng)缺省對(duì)象是一組每次創(chuàng)建隊(duì)列管理器時(shí)自動(dòng)創(chuàng)建的對(duì)象定義。您可以復(fù)制和修改這些對(duì)象定義中的任何一個(gè),以在安裝時(shí)用于應(yīng)用程序。
缺省對(duì)象名具有項(xiàng) SYSTEM.DEFAULT;例如,缺省本地隊(duì)列是 SYSTEM.DEFAULT.LOCAL.QUEUE,并且缺省接收方通道是 SYSTEM.DEFAULT.RECEIVER。您無(wú)法重命名這些對(duì)象;這些名稱的缺省對(duì)象是必需的。
當(dāng)您定義對(duì)象時(shí),從相應(yīng)的缺省對(duì)象復(fù)制您不明確指定的任何屬性。例如,如果您定義本地隊(duì)列,則從缺省隊(duì)列 SYSTEM.DEFAULT.LOCAL.QUEUE 獲取您未指定的那些屬性。
請(qǐng)參閱附錄1, "系統(tǒng)和缺省對(duì)象"以獲取有關(guān)系統(tǒng)缺省的更多信息。
MQI(message queue interface)
MQI(消息隊(duì)列接口)有下列組成部分:
l 函數(shù)接口:應(yīng)用程序通過(guò)函數(shù)可以訪問(wèn)隊(duì)列管理器和它的部件。
l 數(shù)據(jù)結(jié)構(gòu):應(yīng)用程序使用提供的數(shù)據(jù)接口來(lái)是實(shí)現(xiàn)把數(shù)據(jù)傳遞給隊(duì)列管理器,或從隊(duì)列管理器中獲得數(shù)據(jù)。
l 基本數(shù)據(jù)類型:也是用來(lái)實(shí)現(xiàn)從隊(duì)列管理器傳遞數(shù)據(jù),或從隊(duì)列管理器中獲得數(shù)據(jù)。
以下是每個(gè) WebSphere MQ 控制命令的參考信息:
命令名 | 目的 |
amqmcert | 管理 SSL 證書 |
amqmdain | 配置或控制 WebSphere MQ 服務(wù)(僅 Windows 系統(tǒng)) |
crtmqcvx | 轉(zhuǎn)換數(shù)據(jù) |
crtmqm | 創(chuàng)建本地隊(duì)列管理器 |
dltmqm | 刪除隊(duì)列管理器 |
dmpmqaut | 轉(zhuǎn)儲(chǔ)打開(kāi)對(duì)象的權(quán)限 |
dmpmqlog | 轉(zhuǎn)儲(chǔ)日志 |
dspmq | 顯示隊(duì)列管理器 |
dspmqaut | 顯示打開(kāi)對(duì)象的權(quán)限 |
dmpmqcap | 顯示處理程序容量和處理程序數(shù) |
dspmqcsv | 顯示命令服務(wù)器狀態(tài) |
dspmqfls | 顯示文件名 |
dspmqtrc | 顯示格式化跟蹤輸出(HP-UX、Linux 和 Solaris) |
dspmqrtn | 顯示事務(wù)的詳細(xì)信息 |
endmqcsv | 停止隊(duì)列管理器上的命令服務(wù)器 |
endmqlsr | 停止隊(duì)列管理器上的偵聽(tīng)器進(jìn)程 |
endmqm | 停止本地隊(duì)列管理器 |
endmqtrc | 停止對(duì)實(shí)體的跟蹤(不用于 AIX) |
rcdmqimg | 向日志寫對(duì)象的映象 |
rcrmqobj | 根據(jù)它們?cè)谌罩局械挠诚笾匦聞?chuàng)建一個(gè)對(duì)象 |
rsvmqtrn | 提交或逆序恢復(fù)事務(wù) |
runmqchi | 啟動(dòng)通道啟動(dòng)器進(jìn)程 |
runmqchl | 啟動(dòng)發(fā)送方或請(qǐng)求者通道 |
runmqdlq | 啟動(dòng)死信隊(duì)列處理程序 |
runmqlsr | 啟動(dòng)偵聽(tīng)器進(jìn)程 |
runmqsc | 向隊(duì)列管理器發(fā)出 MQSC 命令 |
runmqtmc | 調(diào)用客戶機(jī)的觸發(fā)器監(jiān)控器(僅 AIX 客戶機(jī)) |
runmqtrm | 調(diào)用服務(wù)器的觸發(fā)器監(jiān)控器 |
setmqaut | 更改打開(kāi)對(duì)象的權(quán)限 |
setmqcap | 設(shè)置處理程序容量 |
setmqcrl | 設(shè)置證書撤銷列表(CRL)服務(wù)器定義 |
setmqscp | 設(shè)置服務(wù)連接點(diǎn)(僅 Windows 系統(tǒng)) |
strmqcsv | 啟動(dòng)隊(duì)列管理器的命令服務(wù)器 |
strmqm | 啟動(dòng)本地隊(duì)列管理器 |
strmqtrc | 啟用跟蹤(不用于 AIX) |
舉例
1. 此命令創(chuàng)建一個(gè)稱為 Paint.queue.manager 的缺省隊(duì)列管理器,創(chuàng)建系統(tǒng)和缺省對(duì)象,并請(qǐng)求兩個(gè)主日志文件和三個(gè)次日志文件:
crtmqm -c"Paint shop" -ll -lp 2 -ls 3 -q Paint.queue.manager
2. 下列命令刪除隊(duì)列管理器 travel 并且也抑制任何由該命令發(fā)出的消息。
dltmqm -z travel
3. 此命令立即結(jié)束名為 saturn.queue.manager 的隊(duì)列管理器。完成所有當(dāng)前 MQI 調(diào)用,但不允許新的調(diào)用。
endmqm -isaturn.queue.manager
“MQ的基本概念”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!