IBM MQ(一)基本概念

基本概念

隊列管理器,負責(zé)維護隊列、消息、管道、主題、訂閱等一系列和消息有關(guān)的對象。在分布式系統(tǒng)下,可能存在多個隊列管理器。

消息,消息有三部分組成,應(yīng)用數(shù)據(jù)、描述、屬性;應(yīng)用數(shù)據(jù)是應(yīng)用自己的數(shù)據(jù)結(jié)構(gòu)和內(nèi)容;描述包括一些附加的控制信息,如優(yōu)先級;屬性是由應(yīng)用定義和賦值的鍵值對。值得關(guān)注的是應(yīng)用程序可以根據(jù)屬性來過濾消息。例如在消息監(jiān)聽器中聲明選擇器,通過屬性匹配來過濾自己關(guān)心的消息。另外,IBM MQ的消息默認最大長度4M。

管道,管道是隊列管理器之間,隊列管理器與客戶端(應(yīng)用程序)之間的邏輯連接。如果要完成這些通信,需要預(yù)先將管道在隊列管理器中創(chuàng)建出來。隊列管理器之間的管道是單向流通,客戶端和隊列管理器之間的管道是雙向傳輸。和IBM MQ的隊列管理器打交道都需要指定所用的管道,盡管通過這種方式規(guī)范了構(gòu)件間的通訊甚至可以規(guī)范授權(quán),個人并不是很欣賞這種設(shè)計理念,不夠簡潔。

隊列,隊列分為預(yù)定義隊列和動態(tài)隊列,預(yù)定義隊列是需要在隊列管理器中由管理員提前創(chuàng)建的隊列,動態(tài)隊列是由應(yīng)用程序按隊列模板臨時創(chuàng)建,臨時創(chuàng)建的隊列是臨時隊列還是持久隊列取決于模板,臨時隊列在應(yīng)用程序關(guān)閉后隊列也隨之銷毀,適合使用完即釋放的場景。盡管隊列能夠動態(tài)創(chuàng)建,但是其依賴管理端維護的隊列模板,實質(zhì)上還是需要在管理端有預(yù)先的配置。隊列中的消息按FIFO規(guī)則先進先出,同時,支持按消息優(yōu)先級排序。

隊列也分本地隊列和遠程隊列,這個概念是相對于應(yīng)用程序而言的,應(yīng)用程序連接的隊列管理器所擁有的隊列稱之為本地隊列,與應(yīng)用程序處于非連接的隊列管理所擁有的隊列是遠程隊列。只有本地隊列是可以直接發(fā)送和獲取消息的。如果應(yīng)用程序希望向遠程隊列發(fā)送消息,需要用到跨隊列管理器傳輸能力。大致過程如:首先在所連接的隊列管理器中建一個本地隊列,修改設(shè)置使其成為用于傳輸用途的傳輸隊列,然后,再創(chuàng)建遠程隊列在本地隊列管理器中的定義,指定遠程隊列和傳輸隊列之間的綁定關(guān)系。那么應(yīng)用程序往傳輸隊列發(fā)送消息,隊列管理器會自動將消息發(fā)送到遠程隊列。

主題,主題涉及兩類概念,主題字符串和主題對象,前者是代表主題的字符串標(biāo)識,可以用/分隔,形成一個主題樹,子主題繼承父主題的屬性。主題對象是IBM MQ提供的一種為主題維護預(yù)定義屬性的數(shù)據(jù)對象,可以為每個主題節(jié)點定義主題對象。需要說明的是,主題和主題字符串不需要在IBM MQ中預(yù)定義,主題字符串可以由應(yīng)用程序在發(fā)布或訂閱時指定,對應(yīng)用來說相對靈活一些。

訂閱,訂閱是對某一主題的關(guān)注,有持久和非持久之分。持久訂閱從創(chuàng)建訂閱那個時刻起,無論訂閱者是否在線,主題的消息會持續(xù)向該訂閱投遞一份拷貝。而非持久訂閱只有在訂閱者在線時,才能收到主題中的消息,下線后再上線,并不會得到離線時的消息。定義訂閱時是可以指定消息選擇器的,也就是說選擇器是“訂閱”定義的一個屬性,隊列管理器為該訂閱內(nèi)置創(chuàng)建隊列時,不符合要求的消息是不會分發(fā)到該訂閱,因此,應(yīng)用程序也就不會收到并不關(guān)心的消息。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容