AI agents: use the documentation index at llms.txt to locate machine-readable pages. This section is indexed by https://docs.particular.net/persistence/llms.txt. The markdown version of this page is served as plain text. An MCP server at /mcp serves the same content via the search_docs and read_doc tools; it is read-only and needs no credentials. Markdown versions of documentation pages are available by appending .md to the page URL. Directory URLs use index.md. They are served as text/plain because some retrieval backends reject text/markdown.

Subscription Persister

Component:
Sql Persistence
Target Version:
NServiceBus 10.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 the 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);
    });