Pub/Sub Message Behavior and Properties
Message Delivery Options
NCache provides a DeliveryOption
enum which specifies how the message should
be delivered to any registered subscribers. The delivery option is specified
during message publishing phase. It contains the following options:
DeliveryOption | Description |
---|---|
All |
Delivers message to all registered subscribers, if no subscriber has been registered, it will return without any failure acknowledgment. Message will be sent to any subscriber when it registers on topic; unless message expiration has not occurred. |
Any |
Delivers message to any one of the registered subscribers. If acknowledgement is not received, the message is reassigned to another subscriber till it reaches its expiration time limit. |
The following code sample shows how the DeliveryOption
for the message is specified during publishing.
orderTopic.Publish(message, DeliveryOption.Any);
Message Invalidation
Eviction: If eviction is enabled on cache, messages will also be evicted from topics using LRU based policy. However, LRU in case of Pub/Sub becomes FIFO, as messages are stored in queue like structure in a topic.
If the cache being used for Pub/Sub transactions is the same as the one being used for normal caching, the first priority of eviction will always be cache data.
If cache data is not available for eviction, then messages will be evicted. This will ensure that messages will only be evicted in extreme cases or when cache is dedicated for Pub/Sub only.
Expiration: Expiration can be enabled on messages as with cache items. The messages will be expired from the cache as soon as the expiration interval has passed and uses the same cleaning interval mechanism. Detail for expiration in messages has been provided later in the chapter.
Clear Cache: Messages are removed along with cache items once it is cleared.
Cache Restart: A topic is deleted once the cache is restarted. Hence, any messages contained within it are also invalidated.
Message Delivery Failure Notification
Delivery failure notification is raised to any publisher which has registered message failure event on that topic.
If message fails to deliver e.g. message is not received by subscriber due to any error, it retires until message expiration.
If message expiration is triggered, a notification is sent to publisher containing the expired message and failure reason.
If messages are marked as failed, the messages are only sent to publisher.
If there is no subscription against the topic, messages are removed from the topic.
If the publisher has not registered for failure events, the messages are removed from the topic.
In case a message has been published with no expiration, no notification will be sent as the message stays within the topic indefinitely until the cache is active.
Message Received Notification
Subscribers register a
MessageReceivedCallback
against the topic.Messages are received by subscriber(s) asynchronously. Subscribers register the event against the topic showing interest for messages. When a message is published on the topic, the topic sends these messages to subscriber(s).
Storage and Distribution
Messages are distributed among nodes based upon topologies.
For Partition of Replica and Partitioned topologies, hash-based distribution is used.
For Replicated topology, messages are replicated to all nodes of clustered cache. However, the coordinator node is responsible for message manipulation.
If message store is near eviction, an event is logged for stating store is full and eviction is started.
Messages have an overhead on cache memory. Hence, message size is considered while calculating the cache size.
Encryption and Compression
- Encryption and compression configured at cache level also apply to topic message payload.
State Transfer
In case of state transfer, when messages move to another node in the cluster, the node where message is finally stored is responsible for delivery.
Note that there is a chance of the client application receiving duplicate messages during state transfer.
To create a message to be published to NCache topic, refer to the chapter Creating a Message.