MongoDBQ 1.0.8
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package MongoDBQ --version 1.0.8
NuGet\Install-Package MongoDBQ -Version 1.0.8
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="MongoDBQ" Version="1.0.8" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add MongoDBQ --version 1.0.8
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: MongoDBQ, 1.0.8"
#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 MongoDBQ as a Cake Addin #addin nuget:?package=MongoDBQ&version=1.0.8 // Install MongoDBQ as a Cake Tool #tool nuget:?package=MongoDBQ&version=1.0.8
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
MongoDBQ
A MongoDB message queue that supports locking, retries, scheduling, deduplication, and CosmosDB
Usage
Server
using MongoDBQ;
record TestData(Guid Data);
var client = new MongoClient("mongodb://localhost:27017");
var db = client.GetDatabase("test");
var collection = db.GetCollection<Message<TestData>>("messages");
var mongoDBQ = new MongoDBQ<TestData>(collection, 5, TimeSpan.FromSeconds(5), TimeSpan.FromMinutes(1));
var testData = new TestData(Guid.NewGuid());
var message = new Message<TestData>(testData);
await mongoDBQ.Enqueue(message);
Client
using MongoDBQ;
using MongoDB.Driver;
record TestData(Guid Data);
var client = new MongoClient("mongodb://localhost:27017");
var db = client.GetDatabase("test");
var collection = db.GetCollection<Message<TestData>>("messages");
var mongoDBQ = new MongoDBQ<TestData>(collection, 5, TimeSpan.FromSeconds(5), TimeSpan.FromMinutes(1));
while (true)
{
var message = await mongoDBQ.Dequeue();
//Sleep if message is null?
try
{
//do something with message.Body
await mongoDBQ.Complete(message); //mark as completed
}
catch (System.Exception)
{
//Backoff and retry it later
message.ScheduledEnqueueTime = DateTime.UtcNow.AddMinutes(5);
await mongoDBQ.Fail(message);
//this makes the message available for retry, alternatively use mongoDBQ.Delete(message) if this is terminal
}
}
MongoDBQ
supports these parameters:
maxDeliveryCount
: The maximum number of times a message can be delivered before it is considered poisoned.lockDuration
: The duration for which a message should be locked after being dequeued. When the lock expires it will be available for dequeueing again.expireAfter
: Optional time after which a completed message should be removed from the collection.cosmosDB
: Enable CosmosDB TTL
When creating a Message
:
- Set the
Id
property to enable deduplication; I use Identifiable to create a deterministic name-based GUID from properties of the message body. - Set
ScheduledEnqueueTime
to schedule the message for processing in the future. - Set
PartitionKey
to partition messages in the collection and then useMongoDBQ.Dequeue(partitionKey)
.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. 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. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net6.0
- MongoDB.Driver (>= 2.19.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.