activemq-artemis/docs/user-manual/en/exclusive-queues.md

1.9 KiB

Exclusive Queues

Exclusive queues are special queues which route all messages to only one consumer at a time.

This is useful when you want all messages to be processed serially by the same consumer, when a producer does not specify Message Grouping.

An example might be orders sent to an address and you need to consume them in the exact same order they were produced.

Obviously exclusive queues have a draw back that you cannot scale out the consumers to improve consumption as only one consumer would technically be active. Here we advise that you look at message groups first.

Configuring Exclusive Queues

Exclusive queues can be statically configured using the exclusive boolean property:

<configuration ...>
  <core ...>
    ...
    <address name="foo.bar">
      <multicast>
        <queue name="orders1" exclusive="true"/>
      </multicast>
    </address>
  </core>
</configuration>

Specified on creating a Queue by using the CORE api specifying the parameter exclusive to true.

Or on auto-create when using the JMS Client by using address parameters when creating the destination used by the consumer.

Queue queue = session.createQueue("my.destination.name?exclusive=true");
Topic topic = session.createTopic("my.destination.name?exclusive=true");

Also the default for all queues under and address can be defaulted using the address-setting configuration:

<address-setting match="lastValueQueue">
   <default-exclusive-queue>true</default-exclusive-queue>
</address-setting>

By default, default-exclusive-queue is false. Address wildcards can be used to configure exclusive queues for a set of addresses (see here).

Example

See Exclusive Queue in examples.

For additional examples see org.apache.activemq.artemis.tests.integration.jms.client.ExclusiveTest