基本概念
隊(duì)列管理器禁荸,負(fù)責(zé)維護(hù)隊(duì)列右蒲、消息、管道赶熟、主題瑰妄、訂閱等一系列和消息有關(guān)的對(duì)象。在分布式系統(tǒng)下映砖,可能存在多個(gè)隊(duì)列管理器间坐。
消息,消息有三部分組成邑退,應(yīng)用數(shù)據(jù)竹宋、描述、屬性地技;應(yīng)用數(shù)據(jù)是應(yīng)用自己的數(shù)據(jù)結(jié)構(gòu)和內(nèi)容蜈七;描述包括一些附加的控制信息,如優(yōu)先級(jí)莫矗;屬性是由應(yīng)用定義和賦值的鍵值對(duì)飒硅。值得關(guān)注的是應(yīng)用程序可以根據(jù)屬性來過濾消息砂缩。例如在消息監(jiān)聽器中聲明選擇器,通過屬性匹配來過濾自己關(guān)心的消息狡相。另外梯轻,IBM MQ的消息默認(rèn)最大長(zhǎng)度4M。
管道尽棕,管道是隊(duì)列管理器之間喳挑,隊(duì)列管理器與客戶端(應(yīng)用程序)之間的邏輯連接。如果要完成這些通信滔悉,需要預(yù)先將管道在隊(duì)列管理器中創(chuàng)建出來伊诵。隊(duì)列管理器之間的管道是單向流通,客戶端和隊(duì)列管理器之間的管道是雙向傳輸回官。和IBM MQ的隊(duì)列管理器打交道都需要指定所用的管道曹宴,盡管通過這種方式規(guī)范了構(gòu)件間的通訊甚至可以規(guī)范授權(quán),個(gè)人并不是很欣賞這種設(shè)計(jì)理念歉提,不夠簡(jiǎn)潔笛坦。
隊(duì)列,隊(duì)列分為預(yù)定義隊(duì)列和動(dòng)態(tài)隊(duì)列苔巨,預(yù)定義隊(duì)列是需要在隊(duì)列管理器中由管理員提前創(chuàng)建的隊(duì)列版扩,動(dòng)態(tài)隊(duì)列是由應(yīng)用程序按隊(duì)列模板臨時(shí)創(chuàng)建,臨時(shí)創(chuàng)建的隊(duì)列是臨時(shí)隊(duì)列還是持久隊(duì)列取決于模板侄泽,臨時(shí)隊(duì)列在應(yīng)用程序關(guān)閉后隊(duì)列也隨之銷毀礁芦,適合使用完即釋放的場(chǎng)景。盡管隊(duì)列能夠動(dòng)態(tài)創(chuàng)建悼尾,但是其依賴管理端維護(hù)的隊(duì)列模板柿扣,實(shí)質(zhì)上還是需要在管理端有預(yù)先的配置。隊(duì)列中的消息按FIFO規(guī)則先進(jìn)先出闺魏,同時(shí)未状,支持按消息優(yōu)先級(jí)排序。
隊(duì)列也分本地隊(duì)列和遠(yuǎn)程隊(duì)列析桥,這個(gè)概念是相對(duì)于應(yīng)用程序而言的娩践,應(yīng)用程序連接的隊(duì)列管理器所擁有的隊(duì)列稱之為本地隊(duì)列,與應(yīng)用程序處于非連接的隊(duì)列管理所擁有的隊(duì)列是遠(yuǎn)程隊(duì)列烹骨。只有本地隊(duì)列是可以直接發(fā)送和獲取消息的。如果應(yīng)用程序希望向遠(yuǎn)程隊(duì)列發(fā)送消息材泄,需要用到跨隊(duì)列管理器傳輸能力沮焕。大致過程如:首先在所連接的隊(duì)列管理器中建一個(gè)本地隊(duì)列,修改設(shè)置使其成為用于傳輸用途的傳輸隊(duì)列拉宗,然后峦树,再創(chuàng)建遠(yuǎn)程隊(duì)列在本地隊(duì)列管理器中的定義辣辫,指定遠(yuǎn)程隊(duì)列和傳輸隊(duì)列之間的綁定關(guān)系。那么應(yīng)用程序往傳輸隊(duì)列發(fā)送消息魁巩,隊(duì)列管理器會(huì)自動(dòng)將消息發(fā)送到遠(yuǎn)程隊(duì)列急灭。
主題,主題涉及兩類概念谷遂,主題字符串和主題對(duì)象葬馋,前者是代表主題的字符串標(biāo)識(shí)肾扰,可以用/分隔畴嘶,形成一個(gè)主題樹,子主題繼承父主題的屬性集晚。主題對(duì)象是IBM MQ提供的一種為主題維護(hù)預(yù)定義屬性的數(shù)據(jù)對(duì)象窗悯,可以為每個(gè)主題節(jié)點(diǎn)定義主題對(duì)象。需要說明的是偷拔,主題和主題字符串不需要在IBM MQ中預(yù)定義蒋院,主題字符串可以由應(yīng)用程序在發(fā)布或訂閱時(shí)指定,對(duì)應(yīng)用來說相對(duì)靈活一些莲绰。
訂閱欺旧,訂閱是對(duì)某一主題的關(guān)注,有持久和非持久之分钉蒲。持久訂閱從創(chuàng)建訂閱那個(gè)時(shí)刻起切端,無論訂閱者是否在線,主題的消息會(huì)持續(xù)向該訂閱投遞一份拷貝顷啼。而非持久訂閱只有在訂閱者在線時(shí)踏枣,才能收到主題中的消息,下線后再上線钙蒙,并不會(huì)得到離線時(shí)的消息茵瀑。定義訂閱時(shí)是可以指定消息選擇器的,也就是說選擇器是“訂閱”定義的一個(gè)屬性躬厌,隊(duì)列管理器為該訂閱內(nèi)置創(chuàng)建隊(duì)列時(shí)马昨,不符合要求的消息是不會(huì)分發(fā)到該訂閱,因此扛施,應(yīng)用程序也就不會(huì)收到并不關(guān)心的消息鸿捧。