添加具有附加进程的HangfireServer

问题描述 投票:0回答:1

我正在开始使用 Hangfire 并将其构建为在控制台应用程序而不是 aspnet 中运行后台作业。我看到 sqlstorage 有后台进程,想添加一个额外的进程。有一个关于

AddHangfireServer
包含额外进程的争论,但是,它需要 JobStorage。配置服务时
JobStorage.Current
会引发异常
Current JobStorage instance has not been initialized yet
。我确实发现我可以创建 SqlStorage 的后代并向
GetComponents
添加一个项目,但它被标记为“已过时”。我如何使用非过时的方法来设置它?

private static void Main(string[] args) {
            var host = Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((ctx, cb) => ConfigBuilder(cb, args))
                .ConfigureServices((ctx, svcColl) => ConfigureServices(svcColl, ctx.Configuration))
                .ConfigureLogging(Configurelogging)
                .Build()
                .Run();
}

private static void ConfigureServices(IServiceCollection services, IConfiguration cfg) {
    var dbcs = cfg.GetValue<string>("ConnectionStrings:DB");
    _ = services.AddHangfire(gc => {
        _ = gc
            .UseSimpleAssemblyNameTypeSerializer()
            .UseRecommendedSerializerSettings()
            .UseSqlServerStorage(dbcs);
    });

    _ = services.AddHangfireServer(JobStorage.Current, new[] { new MyProcess { } });
}
c# .net hangfire
1个回答
0
投票

当前JobStorage实例尚未初始化

如此处回答jobstorage未初始化

您应该调用 JobStorage.Current = new 初始化之前的 SqlServerStorage("ConnectionStringName", options) 你的后台作业服务器。

现在关于这个

我看到 sqlstorage 有后台进程,想要添加一个 额外一个

选项1

 JobStorage.Current = new SqlServerStorage("connectionString");
 _ = services.AddHangfireServer(storage: JobStorage.Current , additionalProcesses: new[] { new MyProcess()} );

选项2

任何在 DI 中注册为 IBackgroundProcess 的类都会自动 添加为附加服务

IBackgroundProcess。 从源代码中,您只需让您的类实现此接口并将其注册到 DI 容器中,它将通过

services.GetServices
询问您的 DI 容器以获取您所做的任何注册。

  services.AddTransient<IBackgroundProcess, BackgroundWorker>();

然后在这里就不需要在其他进程下添加它了

JobStorage.Current = new SqlServerStorage("connectionString");

_ = builder.Services.AddHangfireServer(storage: JobStorage.Current);
© www.soinside.com 2019 - 2024. All rights reserved.