Reddoxx.Quartz.MongoDbJobStore.Redlock 2.0.0

Prefix Reserved
dotnet add package Reddoxx.Quartz.MongoDbJobStore.Redlock --version 2.0.0                
NuGet\Install-Package Reddoxx.Quartz.MongoDbJobStore.Redlock -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="Reddoxx.Quartz.MongoDbJobStore.Redlock" Version="2.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Reddoxx.Quartz.MongoDbJobStore.Redlock --version 2.0.0                
#r "nuget: Reddoxx.Quartz.MongoDbJobStore.Redlock, 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 Reddoxx.Quartz.MongoDbJobStore.Redlock as a Cake Addin
#addin nuget:?package=Reddoxx.Quartz.MongoDbJobStore.Redlock&version=2.0.0

// Install Reddoxx.Quartz.MongoDbJobStore.Redlock as a Cake Tool
#tool nuget:?package=Reddoxx.Quartz.MongoDbJobStore.Redlock&version=2.0.0                

MongoDB Job Store for Quartz.NET

NuGet Version

Fork of the awesome codebase of @glucaci with multiple tweaks:

  • Latest .net support
  • Quartz cluster support
  • DI-based configuration
  • Improved locking support

Limitations

  • Due to the nature of the DI-based approach multiple schedulers are not supported on the same host (SchedulerBuilder.Build()).
  • The locking mechanism has been rebuilt to use a SELECT FOR UPDATE approach, which requires transactions. So your MongoDb needs to run in a replica-set configuration. We also provide a way to use redis instead of mongodb transactions for locking (using the redlock algorithm).

Nuget

Install-Package Reddoxx.Quartz.MongoDbJobStore

Basic Usage

First, create your own QuartzMongoDbJobStoreFactory, which provides the a database-instance where your collection should be stored in. The JobStoreFactory itself also needs to be added to your DI-Container as it'll be resolved by the MongoDbJobStore later on.

internal class QuartzMongoDbJobStoreFactory : IQuartzMongoDbJobStoreFactory
{
    private const string LocalConnectionString = "mongodb://localhost/quartz";

    private readonly IMongoDatabase _database;

    public QuartzMongoDbJobStoreFactory()
    {
        var url = new MongoUrl(LocalConnectionString);
        var client = new MongoClient(url);

        _database = client.GetDatabase(url.DatabaseName);
    }

    public IMongoDatabase GetDatabase()
    {
        return _database;
    }
}

Next, register your QuartzMongoDbJobStoreFactory in your DI-Container:

    // Make your job store factory available to the MongoDbJobStore
    services.AddSingleton<IQuartzMongoDbJobStoreFactory, QuartzMongoDbJobStoreFactory>();

Then we can configure quartz for the host. Be sure to specify MongoDbJobStore in q.UsePersistentStore<MongoDbJobStore> as this registers the MongoDbJobStore singleton as well. storage.ConfigureMongoDb(c => ...) allows for further customization.

    services.AddQuartz(
        q =>
        {
            q.SchedulerId = "AUTO";

            q.UsePersistentStore<MongoDbJobStore>(
                storage =>
                {
                    storage.UseClustering();
                    storage.UseNewtonsoftJsonSerializer();
    
                    // Your custom job store configuration
                    storage.ConfigureMongoDb(
                        c =>
                        {
                            // Configure your custom collection prefix
                            c.CollectionPrefix = "CustomPrefix";
                        }
                    );
                }
            );
        }
    );

Use redlock for locking instead of mongodb transactions

Install-Package Reddoxx.Quartz.MongoDbJobStore.Redlock
    // Add the DistributedLocksQuartzLockingManager to your DI container
    services.AddSingleton<IQuartzJobStoreLockingManager, DistributedLocksQuartzLockingManager>();
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 1,881 11/19/2024
1.6.0 83 11/19/2024
1.5.0 375 9/13/2024
1.4.0 226 7/11/2024
1.3.0 276 5/23/2024
1.2.2 883 2/28/2024
1.2.1 139 2/26/2024