This documentation is for WSO2 Message Broker 3.0.0. View documentation for the latest release.
Due to a known issue do not use JDK1.8.0_151 with WSO2 products. Use JDK 1.8.0_144 until JDK 1.8.0_162-ea is released.
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Durable topics persist messages so that if a subscriber is not online, it can receive the messages later. A durable topic subscription is useful when an application needs to be able to receive messages that are published even when the application is inactive.

Creating a durable topic subscriber is similar to creating a nondurable message consumer, but you must also provide a name that identifies the durable subscription, as in the following example:

// Create a durable subscriber, supplying a uniquely-identifying name
TopicSubscriber sub = session.createDurableSubscriber( topic, "mySub1_0001" );

When creating a JMS subscription in tenant mode, the username, topic name and subscription ID should be set in the following manner:

username =username!tenantdomain 
Example: username =rohana!; 

topicName = tenantdomain/topicName; 
Example: topicName =; 

subscription Id=tenantdomain/subscription id 
Example: subscription;

The session used to create a durable topic subscriber must have an associated client identifier. The name that identifies a durable subscription must be unique only within the client identifier, and therefore the client identifier forms part of the full, unique identifier of the durable subscription. To reuse a durable subscription that was created previously, an application must create a durable topic subscriber using a session with the same client identifier as that associated with the durable subscription.

The client identifier associated with a session is the same as that associated with the connection that is used to create the session. The client identifier can be specified by setting the CLIENTID property of the ConnectionFactory object. Alternatively, an application can specify the client identifier by calling the setClientID() method of the Connection object. For more information about client identifiers and their relationship with durable topic subscribers and durable subscriptions, see Java™ Message Service Specification, Version 1.1

Nondurable message consumers in the publish/subscribe domain automatically deregister themselves when their close() method is called, or when they fall out of scope. However, if you want to terminate a durable subscription, you must explicitly notify the broker. To do this, use the unsubscribe() method of the session and pass in the name that identifies the durable subscription:

// Unsubscribe the durable subscriber created above
session.unsubscribe( "mySub1_0001" );

It is not possible to unsubscribe a durable consumer from inside the onMessage() method in the listener. If you need to unsubscribe, write a separate class/thread etc. with a different session, give the subscription ID and unsubscribe.

For an example of how to use durable topic subscriptions, see Creating a Durable Topic Subscription

  • No labels