Reddoxx.Quartz.MongoDbJobStore 1.5.0

Prefix Reserved
There is a newer version of this package available.
See the version list below for details.
dotnet add package Reddoxx.Quartz.MongoDbJobStore --version 1.5.0                
NuGet\Install-Package Reddoxx.Quartz.MongoDbJobStore -Version 1.5.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" Version="1.5.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Reddoxx.Quartz.MongoDbJobStore --version 1.5.0                
#r "nuget: Reddoxx.Quartz.MongoDbJobStore, 1.5.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 as a Cake Addin
#addin nuget:?package=Reddoxx.Quartz.MongoDbJobStore&version=1.5.0

// Install Reddoxx.Quartz.MongoDbJobStore as a Cake Tool
#tool nuget:?package=Reddoxx.Quartz.MongoDbJobStore&version=1.5.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 net8.0 is compatible.  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.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Reddoxx.Quartz.MongoDbJobStore:

Package Downloads
Reddoxx.Quartz.MongoDbJobStore.Redlock

Redlock locking support for quartz-mongodb-job-store

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.0.0 95 11/19/2024
1.6.0 59 11/19/2024
1.5.0 3,563 9/13/2024
1.4.0 460 7/11/2024
1.3.0 5,488 5/23/2024
1.2.2 985 2/28/2024
1.2.1 143 2/26/2024
1.1.4 149 2/21/2024
1.1.2 156 2/13/2024
1.1.0 132 2/13/2024
1.0.0 163 2/2/2024