Getting Started
Architecture
NServiceBus
Transports
ServiceInsight
ServicePulse
ServiceControl
Monitoring
Samples

Subscription Persister

Component: Sql Persistence
Target Version: NServiceBus 9.x

Caching

The storage of subscription information is required for unicast transports.

Subscription information can be cached for a given period of time so that it does not have to be loaded every single time an event is being published. The longer the cache period is, the higher the chance that new subscribers miss some events. It happens when a subscription message arrives after the subscription information has been loaded into memory.

Because of that, there is no good default value for the subscription caching period. It has to be specified by the user. In systems where subscriptions are static, the caching period can be relatively long. To configure it, use following API:

var persistence = endpointConfiguration.UsePersistence<SqlPersistence>();
var subscriptions = persistence.SubscriptionSettings();
subscriptions.CacheFor(TimeSpan.FromMinutes(1));

In systems where events are subscribed and unsubscribed regularly (e.g. desktop applications unsubscribe when shutting down), it makes sense to keep the caching period short or to disable the caching altogether:

var persistence = endpointConfiguration.UsePersistence<SqlPersistence>();
var subscriptions = persistence.SubscriptionSettings();
subscriptions.DisableCache();

Connection

The subscription persister can be configured to use a dedicated connection builder. For example, it may be used for creating subscription tables in a separate database.

var connection = @"Data Source=.\SqlExpress;Initial Catalog=subscriptions;Integrated Security=True";
var persistence = endpointConfiguration.UsePersistence<SqlPersistence>();
var subscriptions = persistence.SubscriptionSettings();

subscriptions.ConnectionBuilder(
    connectionBuilder: () =>
    {
        return new SqlConnection(connection);
    });