To use the transactional session feature with DynamoDB persistence, add a reference to the NServiceBus.
NuGet package.
Configuration
To enable the transactional session feature:
var persistence = config.UsePersistence<DynamoPersistence>();
persistence.EnableTransactionalSession();
Opening a session
To open a DynamoDB transactional session:
using var childScope = serviceProvider.CreateScope();
var session = childScope.ServiceProvider.GetService<ITransactionalSession>();
await session.Open(new DynamoOpenSessionOptions());
// use the session
await session.Commit();
Transactions usage
Message and database operations made with the transactional session are committed together once the session is committed:
await session.Open(new DynamoOpenSessionOptions());
// add messages to the transaction:
await session.Send(new MyMessage());
// access the database:
var dynamoSession = session.SynchronizedStorageSession.DynamoPersistenceSession();
await session.Commit();
For further details about using transactions, see the DynamoDB persistence transactions documentation.
In order to guarantee atomic consistency across message and database operations, the outbox must be enabled. Otherwise Commit
executes database modifications first and then messages are dispatched with best-effort.