獨佔佇列是一種特殊的佇列,它一次只會將所有訊息分派給一個消費者。

當您希望所有訊息都以序列方式處理,但您無法或不想使用訊息群組時,這非常有用。

例如,寄送到某個地址的訂單,您需要按照它們產生的確切順序來消費它們。

顯然,獨佔佇列的缺點是您無法擴展消費者來改善消費,因為實際上只會有一個消費者處於活動狀態。在這裡,我們建議您先考慮使用訊息群組。

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-queuefalse。地址萬用字元可以用來為一組地址設定獨佔佇列。

2. 範例

請參閱獨佔佇列範例,其中展示了如何設定和使用 JMS 的獨佔佇列。