Pandatech.MassTransit.PostgresOutbox 2.0.0

dotnet add package Pandatech.MassTransit.PostgresOutbox --version 2.0.0                
NuGet\Install-Package Pandatech.MassTransit.PostgresOutbox -Version 2.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Pandatech.MassTransit.PostgresOutbox" Version="2.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Pandatech.MassTransit.PostgresOutbox --version 2.0.0                
#r "nuget: Pandatech.MassTransit.PostgresOutbox, 2.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Pandatech.MassTransit.PostgresOutbox as a Cake Addin
#addin nuget:?package=Pandatech.MassTransit.PostgresOutbox&version=2.0.0

// Install Pandatech.MassTransit.PostgresOutbox as a Cake Tool
#tool nuget:?package=Pandatech.MassTransit.PostgresOutbox&version=2.0.0                

1. Pandatech.MassTransit.PostgresOutbox

Welcome to the Pandatech MassTransit PostgreSQL Outbox Extension repository. This library is designed to enhance MassTransit's capabilities by introducing robust support for the Outbox and Inbox patterns with a particular focus on PostgreSQL, alongside seamless integration with multiple DbContexts in Entity Framework Core. This extension is ideal for developers seeking to ensure reliable message delivery and processing in distributed, microservice-oriented architectures.

1.1. Features

  • Multiple DbContext Support: Operate within complex systems using multiple data contexts without hassle.
  • Outbox Pattern Implementation: Reliably handle message sending operations, ensuring no messages are lost in transit, even in the event of system failures.
  • Inbox Pattern Support: Process incoming messages effectively, preventing duplicate processing and ensuring message consistency.
  • PostgreSQL ForUpdate Concurrency Handling: Utilize PostgreSQL's ForUpdate feature for enhanced concurrency control, making your message handling processes more robust.
  • Seamless Integration: Designed to fit effortlessly into existing MassTransit and EF Core based projects.

1.2. Getting Started

To get started with the Pandatech MassTransit PostgreSQL Outbox Extension, ensure you have the following prerequisites:

  • .NET Core 8 or later
  • An existing MassTransit project
  • PostgreSQL database

1.3. Installation

The library can be installed via NuGet Package Manager. Use the following command:

Install-Package Pandatech.MassTransit.PostgresOutbox

1.4. Configuration

Before diving into the usage, it's essential to configure the Pandatech MassTransit PostgreSQL Outbox Extension in your application. This involves setting up your DbContexts, configuring MassTransit to use the extension, and initializing the Outbox and Inbox features.

Stay tuned for the next sections where we'll cover the usage details, showcasing how you can leverage this powerful extension to enhance your distributed systems.

1.5. Usage

Take into account that examples below are given for configuring both inbox and outbox patterns. If you need only one of those , consider using appropriate methods available(eg. instead of AddOutboxInboxServices use AddInboxServices and etc).

1.5.1. Configuration

Entity Configuration: Ensure your DbContext implements the IOutboxDbContext and IInboxDbContext interfaces. Configure your entities and generate migrations. Call ConfigureInboxOutboxEntities on your ModelBuilder to configure the necessary tables for inbox and outbox patterns.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.ConfigureInboxOutboxEntities();
}

And you need to call UseQueryLocks() inside AddDbContext or AddDbContextPool , this needs for enabling ForUpdate feature.

builder.Services.AddDbContextPool<PostgresContext>(options =>
         options.UseNpgsql(connectionString)
                .UseQueryLocks());

Service Registration: Register essential services on startup, specifying the DbContext type. You can optionally override settings(its optional parameter).

services.AddOutboxInboxServices<PostgresContext>();

1.5.2. Publishing Messages (Outbox Pattern)

To publish a message using the outbox pattern, call the AddToOutbox method on your DbContext, specifying your message. Remember to call SaveChanges() to persist the message to the database.

dbContext.Orders.Add(new Order
{
    Amount = 555,
    CreatedAt = DateTime.UtcNow,
});

// Add message to the outbox
dbContext.AddToOutbox(new OrderCreatedEvent());

// Save changes to the database
dbContext.SaveChanges();

1.5.3. Consuming Messages (Inbox Pattern)

To consume messages using the inbox pattern, create a consumer that inherits from InboxConsumer<TMessage, TDbContext> class, specifying the message type and DbContext type as generic arguments.


public class YourConsumer : InboxConsumer<YourMessage, PostgresContext>
{
    private readonly PostgresContext _context;

    public YourConsumer(PostgresContext dbContext, IServiceScopeFactory serviceScopeFactory)
        : base(serviceScopeFactory)
    {
        _context = dbContext;
    }

    public override async Task Consume(YourMessage message)
    {
        // Implement your message processing logic here
    }
}

1.6. License

Pandatech.MassTransit.PostgresOutbox is licensed under the MIT License.

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.0.0 36 11/21/2024
1.0.7 158 6/17/2024
1.0.6 101 6/17/2024
1.0.5 122 5/26/2024
1.0.4 143 4/4/2024
1.0.3 118 4/4/2024
1.0.2 120 4/4/2024
1.0.1 117 4/4/2024
1.0.0 116 4/4/2024

.Net 9 Upgrade