Shared Subscriptions for Topics

Shared subscriptions allow an application to share the work of receiving messages on a topic among multiple message consumers.

When multiple consumers share a subscription, only one consumer in the group receives each new message. This is similar in function to a queue; however, there are no restrictions placed on the type of consumers to the topic, meaning that a topic can have a mix of shared and not shared, durable and non-durable consumers. When a message is published to the topic, the same message goes to all the matching subscriptions.

Shared subscriptions are created with a specific name, and optionally a client ID. Consumers sharing the subscription specify this name when subscribing to the topic. If the shared subscription type is durable, it persists and continues to accumulate messages until deleted. If the shared subscription type is non-durable, it persists only so long as subscribers exist.

For example, the topic foo might have the following subscriptions:

  • not shared, non-durable subscription
  • not shared, durable subscription
  • shared, non-durable subscription called mySharedSub with three shared consumers
  • shared, durable subscription called myDurableSharedSub with two shared consumers

If a message is received on foo, each of the above four subscriptions receive that same message. For the shared subscriptions mySharedSub and myDurableSharedSub, the message is delivered to only one of its respective shared consumers.

If the shared consumers of the shared durable subscription myDurableSharedSub are closed, then the shared durable subscription continues to exist and accumulate messages until it is deleted, or until the application creates a new durable shared consumer named myDurableSharedSub to resume this subscription. If the shared consumers of mySharedSub are all closed, the subscription is removed from topic foo.

See Create a Message Consumer for details on how to create shared subscriptions.