Repository navigation
Home
This library was created to handle distributed work. It was also created because of a specific requirement: the only service guaranteed to be available was Microsoft SQL server.
The library targets .NET 10.0, .NET 8.0 and .NET Standard 2.0. The PostgreSQL transport and the dashboard target only .NET 10.0 and .NET 8.0.
A redis transport was added afterwards. It uses Lua scripting to handle the operations. A SQLite transport was added in 2016.
The following features are available. Transports may also support more features. Some features depend on how you configure the transport. For instance, if Redis crashes, you may lose messages that are not yet committed to disk.
-
Durable. When you send a message and receive the ack, the transport has acknowledged receipt of the message.
-
'At least once' delivery. Work will be delivered at least once. You may receive duplicate messages, depending on various factors. For instance, if a network partition occurs right before a message is completed, that message may be delivered again. You should consider this when you write your message processing logic.
-
Heartbeat: other workers can pick up work held by failed workers.
-
Expiration: work can be expired. Expired work will not be sent to a worker.
-
Delay: work can be delayed. Depending on the transport, the delay may be approximate.
-
Message history: you can opt into lifecycle tracking per message (enqueue, processing, complete, error, expire). Records are kept for a configurable retention period and appear in the dashboard. See MessageHistory.
-
Per-message cancellation: you can cancel running messages cooperatively from the dashboard or in code.
-
Message ID logging scope: when your handler runs, the library automatically pushes MessageId and CorrelationId into the ILogger scope, so structured logs correlate back to specific messages.
-
Message interception: you can compress or encrypt messages in transit with pluggable interceptors. See MessageInterception.
-
Job scheduler: schedule recurring work with cron expressions through the Cronos library. You can run multiple schedulers for redundancy. See Scheduler.
-
Dashboard: a REST API and Blazor Server UI to monitor and manage queues. See Dashboard.
-
Maintenance mode: if you want centralized control, you can run maintenance monitors (heartbeat reset, expiration cleanup) separately from your consumers. See MaintenanceMode.
-
Transports: SQL Server, Redis, PostgreSQL, SQLite, LiteDB, and an in-memory backend.
Copyright © 2016-2026 Brian Lehnen
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 2.1 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this program. If not, see http://www.gnu.org/licenses/.
For any issues please use the GitHub issues