MessageStorage is a library prepared to be used in projects that want to apply the Outbox design pattern.
| Platform | Status |
|---|---|
Travis |
|
GitHub |
| NuGet Package Name | Version |
|---|---|
| MessageStorage.SqlServer | |
| MessageStorage.Postgres | |
| MessageStorage.Integration.MassTransit |
You can download the MessageStorage.SqlServer or MessageStorage.Postgres package according to the storage environment you will use.
UseSqlServer / UsePostgres method lets you introduce SqlServer or Postgres is used for system's data storage.
RegisterHandler / RegisterHandlers method lets you introduce MessageHandlers that is used. When the message is recorded, the tasks that will be
executed in the background will be introduced through these classes.
services.AddMessageStorage(configurator =>
{
configurator.UseSqlServer("SqlServerConnectionString");
configurator.RegisterHandlers(messageHandlerAssemblies);
})
After these steps, you can use the object that is an implementation of IMessageStorageClient interface.
Example of registering SomeEntity and saving SomeEntityCreatedEvent message in the same transaction.
using (IDbConnection connection = _connectionFactory.CreateConnection())
{
using IDbTransaction dbTransaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
using IMessageStorageTransaction transaction = _messageStorageClient.UseTransaction(dbTransaction);
await connection.ExecuteAsync( sqlCommandText, sqlCommandParameters, dbTransaction);
SomeEntityCreated someEntityCreated = new (someEntity.Id, someEntity.SomeProperty, someEntity.CreatedOn);
await _messageStorageClient.AddMessageAsync(someEntityCreated);
transaction.CommitAsync(cancellationToken);
}
After transaction.CommitAsync, created job will be dispatched and executed