Azure Table Storage Configuration
Azure Tables are exposed in two ways in Azure - via Storage accounts & via the premium offering within Cosmos DB APIs. This persistence supports both implementations and behind the curtains uses the Azure.Data.Tables library for communication.
public class OrderState : SagaStateMachineInstance{ public Guid CorrelationId { get; set; } public string CurrentState { get; set; }
public DateTime? OrderDate { get; set; }}Configure the saga repository
Section titled “Configure the saga repository”To configure a Table as the saga repository for a saga, use the code shown below using the AddMassTransit container extension.
TableClient cloudTable;container.AddMassTransit(cfg =>{ cfg.AddSagaStateMachine<OrderStateMachine, OrderState>() .AzureTableRepository(endpointUri, key, r => { cfg.ConnectionFactory(() => cloudTable); });});The container extension will register the saga repository in the container.
To configure the saga repository with a specific key formatter, use the code shown below with KeyFormatter configuration extension.
TableClient cloudTable;container.AddMassTransit(cfg =>{ cfg.AddSagaStateMachine<OrderStateMachine, OrderState>() .AzureTableRepository(endpointUri, key, r => { cfg.ConnectionFactory(() => cloudTable); cfg.KeyFormatter(() => new ConstRowSagaKeyFormatter<OrderState>(typeof(OrderState).Name))) });});Unlike the default ConstPartitionSagaKeyFormatter, ConstRowSagaKeyFormatter in this example uses PartitionKey to store the correlationId which may benefit
from scale-out capability of Tables.