Raycynix.Extensions.Messaging.Database
3.1.0
dotnet add package Raycynix.Extensions.Messaging.Database --version 3.1.0
NuGet\Install-Package Raycynix.Extensions.Messaging.Database -Version 3.1.0
<PackageReference Include="Raycynix.Extensions.Messaging.Database" Version="3.1.0" />
<PackageVersion Include="Raycynix.Extensions.Messaging.Database" Version="3.1.0" />
<PackageReference Include="Raycynix.Extensions.Messaging.Database" />
paket add Raycynix.Extensions.Messaging.Database --version 3.1.0
#r "nuget: Raycynix.Extensions.Messaging.Database, 3.1.0"
#:package Raycynix.Extensions.Messaging.Database@3.1.0
#addin nuget:?package=Raycynix.Extensions.Messaging.Database&version=3.1.0
#tool nuget:?package=Raycynix.Extensions.Messaging.Database&version=3.1.0
Raycynix.Extensions.Messaging.Database
This package follows the shared version in Directory.Build.props. See CHANGELOG.md for release history.
Raycynix.Extensions.Messaging.Database adds persistent inbox and outbox storage for Raycynix messaging on top of Raycynix.Extensions.Database.
Upgrading from 2.x
Version 3 stores CreatedAt, UpdatedAt, and NextAttemptAt persistence columns as signed 64-bit UTC tick values. Existing deployments must migrate those timestamp columns before starting version 3. The change enables indexed filtering, ordering, and bounded cleanup directly in SQL on every supported provider.
What it contains
AddDatabasePersistence(...)- persistent
IIncomingMessageInboxStore - persistent
IMessageOutboxStore - EF Core configurators registered into the shared
DatabaseContext - ambient unit-of-work aware outbox persistence for shared
DatabaseContextscopes - optional background retention cleanup for inbox/outbox tables
- optional Microsoft
ILogger<T>diagnostics for persistence, leases, and cleanup
What it does not contain
- broker-specific Kafka client setup
- broker-specific RabbitMQ client setup
- EF Core entities for your application domain
- cross-resource distributed transactions
Usage
Example appsettings.json:
{
"MessagingDatabasePersistenceConfiguration": {
"InboxTableName": "messaging_inbox",
"OutboxTableName": "messaging_outbox",
"EnableCleanup": true,
"CleanupInterval": "00:05:00",
"CleanupBatchSize": 500,
"ProcessedInboxRetention": "3.00:00:00",
"DispatchedOutboxRetention": "3.00:00:00"
}
}
builder.Services
.AddRaycynixDatabase(builder.Configuration)
.AddPostgreSql();
builder.Services.AddRaycynixMessaging(builder.Configuration)
.AddDatabasePersistence(builder.Configuration);
You can still override specific values in code:
builder.Services.AddRaycynixMessaging(builder.Configuration)
.AddDatabasePersistence(builder.Configuration, options =>
{
options.InboxTableName = "tenant_a_messaging_inbox";
});
The package replaces the default in-memory inbox/outbox stores with database-backed implementations and registers its EF Core configurators into the shared DatabaseContext through AddRaycynixDatabaseAssembly(...). Table creation still flows through the existing Raycynix database initialization pipeline.
Inbox and outbox lease acquisition uses optimistic concurrency through EF Core model metadata, so the package stays provider-agnostic across SQLite, PostgreSQL, SQL Server, and MySQL without introducing provider-specific SQL into the messaging layer.
This package gives messaging persistence that survives process restarts, participates in the ambient shared DatabaseContext unit of work for outbox writes, runs retention cleanup, and works with the existing outbox recovery pipeline. It does not provide distributed transactions, but it does provide durable inbox/outbox state and database-backed recovery and dispatch leasing in the configured relational database.
Logging
The database persistence package uses optional Microsoft ILogger<T> diagnostics when logging is registered in the application. No Raycynix logging provider is required.
Diagnostics cover inbox/outbox status transitions, lease acquisition decisions, optimistic concurrency outcomes, and cleanup counts. Payloads, serialized headers, header values, and database connection details are not logged.
Table Schemas
Inbox and Outbox tables inherit PostgreSqlOptions.DefaultSchema or MsSqlServerOptions.DefaultSchema
from the shared database context. Their configured table names remain unchanged. No separate schema
option is required in messaging persistence. Without a default schema, provider/database defaults apply.
MySQL treats explicitly qualified schemas as database names; SQLite ignores schema mappings.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.12)
- Raycynix.Extensions.Database (>= 3.1.0)
- Raycynix.Extensions.Messaging (>= 3.1.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Raycynix.Extensions 3.1.0. All packages inherit the shared version from Directory.Build.props. See https://github.com/raycynix/Raycynix.Extensions/blob/HEAD/src/Raycynix.Extensions.Messaging.Database/CHANGELOG.md for package-specific changes and https://github.com/raycynix/Raycynix.Extensions/blob/HEAD/CHANGELOG.md for the release overview.