Non-durable persistence

Source
NuGet Package NServiceBus (5.x)
Standard support for version 5.x of NServiceBus has expired. For more information see our Support Policy.
From v8, the InMemoryPersistence has been renamed and moved to a dedicated package called the NonDurablePersistence

Some scenarios require an non-durable persistence such as the development environment or a lightweight client not interested in durability across restarts:

Persistence at a glance

For a description of each feature, see the persistence at a glance legend.

Feature
Storage TypesSagas, Outbox, Subscriptions, Timeouts
TransactionsNone
Concurrency controlOptimistic concurrency
Scripted deploymentDoes not apply
InstallersDoes not apply

Configuration

var persistence = busConfiguration.UsePersistence<InMemoryPersistence>();
persistence.For(
    Storage.Sagas,
    Storage.Subscriptions,
    Storage.Timeouts,
    Storage.Outbox,
    Storage.GatewayDeduplication);
busConfiguration.UsePersistence<InMemoryPersistence, StorageType.Sagas>();
busConfiguration.UsePersistence<InMemoryPersistence, StorageType.Subscriptions>();
busConfiguration.UsePersistence<InMemoryPersistence, StorageType.Timeouts>();
busConfiguration.UsePersistence<InMemoryPersistence, StorageType.Outbox>();
busConfiguration.UsePersistence<InMemoryPersistence, StorageType.GatewayDeduplication>();
All information stored is discarded when the process ends.
The delayed retries mechanism uses the timeout manager when a transport does not natively support delayed delivery.

As delayed retries are enabled by default, using this persistence with a transport that uses the timeout manager has the risk of losing messages that have failed processing and are waiting for another retry attempt. Use this persistence only in scenarios where it is acceptable to lose messages.

Gateway deduplication

In-memory gateway deduplication persistence has no built-in cleanup.

Saga concurrency

When simultaneously handling messages, conflicts may occur. See below for examples of the exceptions which are thrown. Saga concurrency explains how these conflicts are handled, and contains guidance for high-load scenarios.

Starting a saga

Example exception:

System.InvalidOperationException: The saga with the correlation id 'Name: OrderId Value: f05c6e0c-aea6-48d6-846c-d1663998ebf2' already exists

Updating or deleting saga data

Non-durable persistence uses optimistic concurrency control when updating or deleting saga data.

Example exception:

System.Exception: InMemorySagaPersister concurrency violation: saga entity Id[a15a31fd-4f25-4dc3-b556-aad200e52dcb] already saved.

Related Articles


Last modified