= Exclusive Queues
:idprefix:
:idseparator: -
:docinfo: shared

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

This is useful when you want all messages to be processed _serially_ but you can't or don't want to use xref:message-grouping.adoc#message-grouping[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:

[,xml]
----
<address name="foo.bar">
   <multicast>
      <queue name="orders1" exclusive="true"/>
   </multicast>
</address>
----

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.

[,java]
----
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:

[,xml]
----
<address-setting match="lastValueQueue">
   <default-exclusive-queue>true</default-exclusive-queue>
</address-setting>
----

By default, `default-exclusive-queue` is `false`.
Address  xref:wildcard-syntax.adoc#wildcard-syntax[wildcards] can be used to configure exclusive queues for a  set of addresses.

== Example

See the xref:examples.adoc#exclusive-queue[exclusive queue example] which shows how  exclusive queues are configured and used with JMS.
