Mediarq.Outbox
1.5.1
dotnet add package Mediarq.Outbox --version 1.5.1
NuGet\Install-Package Mediarq.Outbox -Version 1.5.1
<PackageReference Include="Mediarq.Outbox" Version="1.5.1" />
<PackageVersion Include="Mediarq.Outbox" Version="1.5.1" />
<PackageReference Include="Mediarq.Outbox" />
paket add Mediarq.Outbox --version 1.5.1
#r "nuget: Mediarq.Outbox, 1.5.1"
#:package Mediarq.Outbox@1.5.1
#addin nuget:?package=Mediarq.Outbox&version=1.5.1
#tool nuget:?package=Mediarq.Outbox&version=1.5.1
Mediarq.Outbox
A transactional outbox over EF Core: stage a notification in the same transaction as your business data, then publish it reliably afterwards — the event is never lost and never published without the data.
dotnet add package Mediarq.Outbox
Usage
- Map the outbox table in your
DbContext:
protected override void OnModelCreating(ModelBuilder modelBuilder)
=> modelBuilder.ApplyMediarqOutbox();
- Register it (after
AddMediarq/AddMediarqCore, and after yourDbContext):
builder.Services.AddMediarqOutbox<AppDbContext>(o => o.PollingInterval = TimeSpan.FromSeconds(5));
- Enqueue from a handler — typically a transactional command, so the unit of work commits the event with your data:
public class CreateOrderHandler(AppDbContext db, IOutbox outbox)
: ICommandHandler<CreateOrder, Result<Guid>> // CreateOrder : ITransactionalRequest
{
public Task<Result<Guid>> Handle(CreateOrder request, CancellationToken ct = default)
{
var order = /* ... */;
db.Orders.Add(order);
outbox.Enqueue(new OrderPlaced(order.Id)); // committed atomically, published later
return Task.FromResult(Result.Success(order.Id));
}
}
A background OutboxProcessor publishes pending messages through IPublisher within the polling
interval (at-least-once). Pairs naturally with Mediarq.EntityFrameworkCore (the unit of work) and
Mediarq.MassTransit (forward the published event out-of-process).
Learn more
Wiring extensions · Full README
MIT © Nicolas Rouffart
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Mediarq.Core (>= 1.5.1)
- Microsoft.EntityFrameworkCore (>= 8.0.10)
- Microsoft.Extensions.Hosting.Abstractions (>= 8.0.1)
-
net8.0
- Mediarq.Core (>= 1.5.1)
- Microsoft.EntityFrameworkCore (>= 8.0.10)
- Microsoft.Extensions.Hosting.Abstractions (>= 8.0.1)
-
net9.0
- Mediarq.Core (>= 1.5.1)
- Microsoft.EntityFrameworkCore (>= 8.0.10)
- Microsoft.Extensions.Hosting.Abstractions (>= 8.0.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.