• Webinars
  • Docs
  • Download
  • Blogs
  • Contact Us
Show / Hide Table of Contents
  • Programmer's Guide
  • Client Side API Programming
    • Setting Up Development Environment
    • Basic Cache Operations
      • Initialize Cache
      • Add Data to Cache
      • Update Data in Cache
      • Fetch Data From Cache
      • Remove Data From Cache
      • Dispose Cache
    • Bulk Operations
      • Adding Collection to Cache
      • Updating Collection in Cache
      • Retrieving Collection from Cache
      • Removing Collection from Cache
      • Deleting Collection from Cache
    • Asynchronous Operations
      • Using Asynchronous Operations
      • Using Asynchronous Operations with Callback Methods
    • Groups and Subgroups
      • Adding/Updating Data Group in Cache
      • Retrieving Data Group from Cache
      • Removing Data Group from Cache
    • Tagging Data in NCache
      • Creating Tags
      • Adding Items with Tags
      • Retrieving Previously Tagged Data
      • Removing Tagged Items from Cache
    • Named Tags
    • Data Expiration Strategies
      • Using Absolute Expiration
      • Using Sliding Expiration
    • Cache Dependencies
      • Key Dependency
      • File Dependency
      • Notification based Dependencies
        • Database Dependency using SQL Server
        • Database Dependency using Oracle
      • Polling Based Dependency
      • Custom Data Source Dependency
      • Multiple Cache Sync Dependency
      • Aggregate Dependency
      • Add Dependency to Existing Item
      • Using CLR Procedures to Call NCache
    • Locking Data in NCache
      • Locking Items in Cache (Pessimistic Locking)
      • Locking Items with Cache Item Versioning (Optimistic Locking)
    • SQL Reference for NCache
      • SQL Syntax
      • Querying Samples for Operators
      • Querying Data in NCache
      • NCache Language Integrated Query (LINQ)
        • Using LINQ in NCache
        • Configuring LINQPad for NCache
        • Querying NCache Data in LINQPad
    • Event Notifications
      • Cache Level Event Notifications
      • Item Level Event Notifications
      • Custom Event Notifications
    • Publish/Subscribe (Pub/Sub) in NCache
      • Pub/Sub Topics
      • Managing Topics
      • Pub/Sub Messages
        • Message Behavior and Properties
        • Creating a Message
      • Publish Messages to Topic
      • Subscribe for Topic Messages
      • Monitoring Pub/Sub Topics
    • Continuous Query
    • Using Streams in NCache
      • Opening with Stream Modes
      • Adding and Updating Data with Streams
      • Retrieving Data from Streams
      • Closing a Stream
    • Security and Encryption
      • NCache Security
      • NCache Data Encryption
    • Data Compression
    • NCache Management API
  • Server Side API Programming
    • Cache Startup Loader
      • Components of Cache Startup Loader
      • Sample Implementation of ICacheLoader on Single Node
      • Sample Implementation of ICacheLoader with Distribution Hints
    • Data Source Providers (Backing Source)
      • Read-Through Caching
        • Configure Read-Through Provider
        • Using Read-Through with Cache Operations
      • Write-Through Caching
        • Configuring Write-Through Provider
        • Using Write-Through with Basic Operations
        • Using Write-Behind with Basic Operations
        • Using Write-Behind with Bulk Operations
        • Using Write-Behind with Async Operations
        • Monitor Write-Through Counters
    • Custom Dependency
      • Sample Implementation of Custom Dependency
      • Sample Usage of Custom Dependency
    • WAN Replication through Bridge
      • Bridge Configurations
      • Implementing Bridge Conflict Resolver
    • Entry Processor
      • Sample Implementation of IEntryProcessor Interface
      • Sample Usage of EntryProcessor
    • MapReduce
      • Sample Implementation of MapReduce Interfaces
      • Sample Usage of MapReduce
    • Aggregator
      • Sample Implementation of IValueExtractor Interface
      • Sample Implementation of IAggregator Interface
      • Sample Usage of Aggregator
    • Dynamic Compact Serialization
  • Client Side ASP.NET Features
    • ASP.NET
      • ASP.NET Session State Provider for NCache
      • Multi-Region ASP.NET Session State Provider for NCache
    • ASP.NET Core
      • Session Storage in ASP.NET Core
        • Configure NCache ASP.NET Core Session Provider
        • Configure ASP.NET Core Sessions with NCache IDistributedCache Provider
      • Multi-Region ASP.NET Core Session Provider for NCache
      • Object Caching in ASP.NET Core
    • ASP.NET SignalR
      • Using NCache Extension for SignalR
    • View State Caching
      • Configuring and Using Content Optimization
      • Group View State with Sessions
      • Limit View State Caching
      • Perform Page Level Grouping for View State
    • ASP.NET Output Cache
      • Configure ASP.NET Output Caching
      • Using ASP.NET Output Cache with Custom Hooks
  • Client Side Third Party Integrations
    • Migrating AppFabric to NCache
      • AppFabric API vs. NCache API
    • NHibernate
      • NCache as NHibernate Second Level Cache
      • Using NHibernate Query Caching
      • Configuring Database Synchronization with NHibernate
    • Entity Framework Caching Integration
      • NCache as Entity Framework Second Level Cache
      • Entity Framework Caching Config File
    • Entity Framework Core Caching
      • Installing NCache Entity Framework Core Provider
      • Configuring NCache Entity Framework Core Provider
      • Using NCache Entity Framework Core Provider
        • Caching Options for EF Core Provider
        • LINQ APIs for EF Core Provider
        • Cache Only APIs for EF Core Provider
        • Query Deferred APIs for EF Core Provider
      • Logging in NCache Entity Framework Core Provider
    • Memcached
      • NCache Memcached Gateway Approach
      • Memcached Client Plugin for .NET
    • Debug NCache Providers in Visual Studio
    • NCache for Visual Studio Extension

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.

Back to top Copyright © 2017 Alachisoft