让 Hangfire 使用 MongoDB 存储

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了让 Hangfire 使用 MongoDB 存储相关的知识,希望对你有一定的参考价值。

MongoDB 支持Hangfire库。通过使用这个库,您可以将所有作业信息存储在 MongoDB 中。

要安装 Hangfire MongoDB Storage,请在 Nuget 包管理器控制台中运行以下命令:


PM> Install-Package Hangfire.Mongo

public void ConfigureServices(IServiceCollection services)
{
    var mongoUrlBuilder = new MongoUrlBuilder("mongodb://localhost/jobs");
    var mongoClient = new MongoClient(mongoUrlBuilder.ToMongoUrl());

    // Add Hangfire services. Hangfire.AspNetCore nuget required
    services.AddHangfire(configuration => configuration
        .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
        .UseSimpleAssemblyNameTypeSerializer()
        .UseRecommendedSerializerSettings()
        .UseMongoStorage(mongoClient, mongoUrlBuilder.DatabaseName, new MongoStorageOptions
        {
            MigrationOptions = new MongoMigrationOptions
            {
                MigrationStrategy = new MigrateMongoMigrationStrategy(),
                BackupStrategy = new CollectionMongoBackupStrategy()
            },
            Prefix = "hangfire.mongo",
            CheckConnection = true
        })
    );
    // Add the processing server as IHostedService
    services.AddHangfireServer(serverOptions =>
    {
        serverOptions.ServerName = "Hangfire.Mongo server 1";
    });

    // Add framework services.
}

var options = new MongoStorageOptions
{
    MigrationOptions = new MongoMigrationOptions
    {
        MigrationStrategy = new DropMongoMigrationStrategy(),
        BackupStrategy = new NoneMongoBackupStrategy()
    }
};
GlobalConfiguration.Configuration.UseMongoStorage("mongodb://localhost/jobs", options);
app.UseHangfireServer();
app.UseHangfireDashboard();

Throw

这是默认的迁移策略。如果架构版本不匹配,它将抛出InvalidOperationException,永远不会让您启动并运行。因此,它迫使您决定什么迁移策略最适合您,同时确保数据的安全。

Drop

这只需删除现有的Hangfire.Mongo数据库并更新模式版本。没有绒毛,准备从头开始。这是一个完美的策略,如果你在创业时把所有的工作都安排好。

Migrate

这将把数据库从一个模式版本迁移到下一个模式版本,直到达到所需的模式版本。并不是所有的数据都可以迁移,这就是为什么会发生一些数据丢失的原因。在投入生产前,请谨慎使用并仔细测试。我们不对数据丢失负责。

注意:只支持前向迁移。如果需要还原到以前的架构版本,则需要手动删除或还原以前的数据库。

https://github.com/sergeyzwezdin/Hangfire.Mongo

以上是关于让 Hangfire 使用 MongoDB 存储的主要内容,如果未能解决你的问题,请参考以下文章

在没有数据库存储的情况下使用 HangFire 进行后台作业处理?

abp 使用 hangfire结合mysql

Hangfire源码解析-任务是如何执行的?

Hangfire.io仪表板映射到IIS虚拟目录

ABP集成Hangfire

当 Hangfire 并行处理多个作业时,为啥 MySQL InnoDB 会产生如此多的死锁?