DynamoDb Configuration
DynamoDB is a fully managed NoSQL database provided by AWS. Setting it up as a SagaRepository is simple, but do note that it requires implementing the ISagaVersion interface that requires a Version property for optimistic concurrency:
public class OrderState : SagaStateMachineInstance, ISagaVersion{ public Guid CorrelationId { get; set; } public int Version { get; set; } public string CurrentState { get; set; } public DateTime? OrderDate { get; set; }}Configure the saga repository
Section titled “Configure the saga repository”To configure DynamoDB as a saga repository, use the AddMassTransit container extension:
builder.Services.AddMassTransit(cfg =>{ cfg.AddSagaStateMachine<OrderStateMachine, OrderState>() .DynamoDbRepository(config => { // required config.TableName = "Orders"; // required. Refer to AWS SDK docs for how to create a context. config.ContextFactory(provider => new DynamoDBContext(dynamoDbClient)); });});The code above configures the repository to store saga instances in a table named Orders. A DynamoDBContext must be created from an existing
AmazonDynamoDBClient instance. For example, if a local dynamodb instance is used, the code creating a client could look like this:
var dynamoDbClient = new AmazonDynamoDBClient(new AmazonDynamoDBConfig { ServiceURL = "http://localhost:4566" });