獨佔佇列是一種特殊的佇列,它一次只會將所有訊息分派給一個消費者。
當您希望所有訊息都以序列方式處理,但您無法或不想使用訊息群組時,這非常有用。
例如,寄送到某個地址的訂單,您需要按照它們產生的確切順序來消費它們。
顯然,獨佔佇列的缺點是您無法擴展消費者來改善消費,因為實際上只會有一個消費者處於活動狀態。在這裡,我們建議您先考慮使用訊息群組。
1. 設定獨佔佇列
可以使用 exclusive
布林屬性靜態設定獨佔佇列
<address name="foo.bar">
<multicast>
<queue name="orders1" exclusive="true"/>
</multicast>
</address>
在建立佇列時,透過使用 CORE API 並將參數 exclusive
指定為 true
來設定。
或者,當使用 JMS Client 時,可以在建立消費者使用的目的地時使用地址參數,來進行自動建立。
Queue queue = session.createQueue("my.destination.name?exclusive=true");
Topic topic = session.createTopic("my.destination.name?exclusive=true");
此外,可以使用 address-setting
設定來預設某個地址下所有佇列的預設值
<address-setting match="lastValueQueue">
<default-exclusive-queue>true</default-exclusive-queue>
</address-setting>
預設情況下,default-exclusive-queue
為 false
。地址萬用字元可以用來為一組地址設定獨佔佇列。