Getting Started
Architecture
Transports
Persistence
ServiceInsight
ServicePulse
ServiceControl
Monitoring
Samples

Transactional Session with CosmosDB Persistence

NuGet Package: NServiceBus.Persistence.CosmosDB.TransactionalSession (2.x)
Target Version: NServiceBus 8.x

In order to use the transactional session feature with CosmosDB Persistence, add a reference to the NServiceBus.Persistence.CosmosDB.TransactionalSession NuGet package.

Configuration

To enable the transactional session feature:

var persistence = config.UsePersistence<CosmosPersistence>();
persistence.EnableTransactionalSession();

Opening a session

To open a CosmosDB transactional session, a partition key must be provided:

using var childScope = serviceProvider.CreateScope();
var session = childScope.ServiceProvider.GetService<ITransactionalSession>();
await session.Open(
        new CosmosOpenSessionOptions(
            new PartitionKey("MyPartitionKey")));

// use the session

await session.Commit();

Custom container

By default, the transactional session uses the configured default container. The CosmosOpenSessionOptions instance can be configured with container information to be used for this transaction:

using var childScope = serviceProvider.CreateScope();
var session = childScope.ServiceProvider.GetService<ITransactionalSession>();
await session.Open(
        new CosmosOpenSessionOptions(
            new PartitionKey("MyPartitionKey"),
            new ContainerInformation(
                "MyContainer",
                new PartitionKeyPath("/path/to/partition/key"))));

// use the session

await session.Commit();

Transaction usage

Message and database operations made via the the transactional session are committed together once the session is committed:

await session.Open(
        new CosmosOpenSessionOptions(
            new PartitionKey("MyPartitionKey")));

// add messages to the transaction:
await session.Send(new MyMessage());

// access the database:
var cosmosSession = session.SynchronizedStorageSession.CosmosPersistenceSession();

await session.Commit();

See the Cosmos DB persistence transactions documentation for further details about using the transaction.

Samples

Related Articles