Pub/Sub Topics
A topic is an entity containing the message itself, along with additional subscriber and publisher information and is stored in the cache. The topic contains the message store which stores the actual data objects published by the publisher in a queue. It also internally maintains a list of all subscribers subscribing to it.
Once the message is published to the topic, it fires an event, which the topic relays to subscribers based upon preference of message delivery option so that they can get the message as needed. The following figure illustrates the role of a topic as an intermediary channel for publishers and subscribers:
IMessagingService Interface
NCache provides the IMessagingService
interface to manage topics like create,
get or delete a topic from cache. It contains the following methods:
Method | Description |
---|---|
CreateTopic(string TopicName) |
Creates topic in cache with specified name. If the topic already exists, an instance of the topic is returned as ITopic . Whenever a message is published on a topic, it is delivered based on message preference to subscribers that are registered on that topic. |
GetTopic(string TopicName) |
Fetches an instance of the specified topic from the cache. If the topic exists, it is returned, otherwise null is returned. |
DeleteTopic(string topicName) |
Unregisters the topic from cache and removes all messages associated with that topic. If registered, a topic deletion callback (OnTopicDeleted ) will be triggered upon this method call. |
ITopic Interface
The ITopic
interface facilitates creating subscription and publishing of
messages against the topic. This also provides event registrations for message
delivery failure, receiving messages and deleting topics.
Methods | Type | Description |
---|---|---|
CreateSubscription(MessageReceivedCallback messageReceivedCallback) |
ITopicSubscription |
Register against topic on cache if topic exists, otherwise throw exception. |
Publish(Message message, DeliveryOption deliverOption, bool notifyDeliveryFailure = false) |
void | Publish the message in the cache with specified DeliveryOption :All = 0Any = 1And the option to notify the publisher if the message has failed to deliver because of expiration, eviction or internal system issue. |
Members | Type | Description |
---|---|---|
MessageDeliveryFailure |
MessageDeliveryFailureCallback |
Event on topic so that publisher receives all failed messages that are not delivered to any subscribers or may be messages are expired or evicted before delivery. |
Name |
string |
Name of the topic specified during topic creation. |
OnTopicDeleted |
TopicDeletedCallback |
Event to handle topic deletion by publisher and subscriber. |
ExpirationTime |
TimeSpan |
Topic level expiration, if message level expiration is not provided, topic expiration is used which is TimeSpan.MaxValue by default. |
IsClosed |
bool |
Check whether topic is disposed, before performing any operation. |
Dispose |
IDisposable |
Removes registered topic’s subscription from cache server. |
ITopicSubscription Interface
NCache provides ITopicSubscription
interface which is returned against the desired topic, containing information for topic subscriptions.
Member | Description |
---|---|
Topic |
ITopic instance containing information about the topic. |
UnSubscribe |
Allows the subscriber to unregister from the topic, i.e., the subscriber will not receive any messages in the future. |
MessageReceivedCallback |
Event to register subscriber against the topic so that it can receive the published messages. |
You can now manage topics using these interfaces as explained in Managing Topics.
Topic Behavior
Client Disconnection
In case of client application disconnection, all topic related information such as client subscriptions and failure event notifications are re-registered to topic without any interruption on client application end.
Topic Deletion Notification
In case a topic is deleted, it is a forceful deletion and deletes all messages and related meta-info form the cache. Hence, the subscriber and publisher must be notified of this deletion because of the following reasons:
The subscriber might be waiting for incoming messages from the registered topic. Once the topic does not exist, the subscribers can then handle their execution accordingly through event notification and prevent infinite waiting state.
The publisher can prevent sending messages to a non-existing topic and handle any pending payloads and future execution accordingly.