在 Message Queue 4.2 中,發佈程式現在可將訊息發佈至多個主題目標,而訂閱者可從多個主題目標使用訊息。使用包含萬用字元符號的主題目標名稱即可代表多個目標,進而達成此功能。使用這類符號名稱可讓管理員視需要建立與萬用字元命名方案一致的其他主題目標。發佈程式與訂閱者會自動發佈至增加的目標,以及從增加的目標進行取用 (萬用字元主題訂閱者比發佈程式更常用)。
此功能不會套用至佇列目標。
符號主題目標名稱的格式包含多個區段,其中萬用字元符號 (*、**、>) 可代表名稱的一或多個區段。例如,假設您的主題目標命名方案如下:
size.color.shape
其中主題名稱區段可具有下列值:
size:large、medium、small...
color:red、green、blue...
shape:circle、triangle、square...
Message Queue 支援下列萬用字元符號:
* 表示尋找單一區段
** 表示尋找一或多個區段
> 表示尋找不限數目的連續區段
因此,您可以如下表示多個主題目標:
large.*.circle 表示:
large.red.circle large.green.circle ...
**.square 代表結尾是 .square 的所有名稱,例如:
small.green.square medium.blue.square ... |
small.> 代表開頭是 small. 的所有目標名稱,例如:
small.blue.circle small.red.square ... |
若要使用此多重目標功能,您可以使用類似上述的命名方案建立主題目標。用戶端應用程式會接著建立使用符號目標名稱的發佈程式或用戶。例如:
... String DEST_LOOKUP_NAME = "large.*.circle"; Topic t = (Destination) ctx.lookup(DEST_LOOKUP_NAME); TopicPublisher myPublisher = mySession.createPublisher(t) myPublisher.send(myMessage);
... String DEST_LOOKUP_NAME = "**.square"; Topic t = (Destination) ctx.lookup(DEST_LOOKUP_NAME); TopicSubscriber mySubscriber = mySession.createSubscriber(t); Message m = mySubscriber.receive();
在第一個範例中,代理程式會在符合符號名稱 large.*.circle 的所有目標中,放置一個訊息副本。在第二個範例中,若至少有一個目標符合符號名稱 **.square,則會建立訂閱者;且訂閱者會從符合該符號名稱的所有目標接收訊息。若沒有目標符合符號名稱,則在出現此目標之前,不會建立訂閱者。
若管理員建立符合符號名稱的其他目標,則使用此符號名稱建立的萬用字元發佈程式會接著發佈至此目標,且使用此符號名稱建立的萬用字元訂閱者會接著接收來自此目標的訊息。
此外,Message Queue 管理工具除了會報告某主題目標的發佈程式 (產生器) 與訂閱者 (用戶) 總數之外,還會報告萬用字元發佈程式 (包含其對應符號目標名稱) 的數目,以及萬用字元訂閱者 (包含其符號目標名稱) 的數目 (若有的話)。