是否有适用于Hangfire的内存作业存储包?

Los*_*ary 21 c# hangfire

我有一个控制台应用程序来测试HangFire.这是代码:

using System;
using Hangfire;

namespace MyScheduler.ConsoleApp
{
    internal static class Program
    {
        internal static void Main(string[] args)
        {
            MyMethod();

            Console.WriteLine("[Finished]");
            Console.ReadKey();
        }

        private static void MyMethod()
        {
            RecurringJob.AddOrUpdate(() => Console.Write("Easy!"), Cron.Minutely);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但它在运行时抛出异常:

附加信息:JobStorage.Current属性值尚未初始化.您必须在使用Hangfire客户端或服务器API之前进行设置.

所以我需要一个工作存储来运行它.但是SQL存储中的所有示例等.有没有办法用某种内存存储来运行这个例子?

JobStorage.Current = new SqlServerStorage("ConnectionStringName", options);  
// to  
JobStorage.Current = new MemoryDbStorage(string.Empty, options);  
Run Code Online (Sandbox Code Playgroud)

Yog*_*ogi 40

您可以使用Hangfire.MemoryStorage.

只需添加此nuget包.

然后你就可以像 -

GlobalConfiguration.Configuration.UseMemoryStorage();
Run Code Online (Sandbox Code Playgroud)

  • @mason:是的,听说:),但为了以防万一......,可能是他感到困惑或者那种,我不知道.但他发布了q.,这比谷歌搜索更省力,所以我想他可能需要我们回答:) (2认同)
  • 正如作者所注意到的,内存存储不应该在生产环境中。 (2认同)

Qui*_*ith 20

对于NET Core(Web应用程序):

只是为了让它变得非常明显,因为这对我来说并不明显.

安装以下nuget包:

  • 迟发型.AspNet Core(v1.6.17 atow)
  • Hangfire.MemoryStorage.Core(v1.4.0 atow)

在Startup.cs中:

    public void ConfigureServices(IServiceCollection services)
    {
        // other registered services
        ...

        services.AddHangfire(c => c.UseMemoryStorage());
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        // other pipeline configuration            
        ...

        app.UseHangfireServer();

        app.UseMvc();
    }
Run Code Online (Sandbox Code Playgroud)

任何低于上述的东西,我的排队方法都没有开火.

  • 为了让它变得超级明显:不要忘记 using Hangfire 和 using Hangfire.MemoryStorage 声明。 (3认同)

tim*_*4sa 9

为了完整起见,Hangfire 库的作者添加了一个名为Hangfire.InMemoryNuget 上可用的版本的新包。存储库自述文件将其定位为针对生产用途。引用github 存储库 URL如下:“..Hangfire 的高效事务内存存储,其数据结构接近其最佳表示形式。此尝试的结果应该使该存储实现能够在生产环境中使用,并处理 in 的特定属性。 -记忆处理..”

熟悉的配置概念也适用于此: GlobalConfiguration.Configuration.UseInMemoryStorage();

我个人添加如下: services.AddHangfire(configuration => { configuration.UseInMemoryStorage(); });


goa*_*amn 6

正如 Yogi 所说,您可以使用 Hangfire.MemoryStorage 或 Hangfire.MemoryStorage.Core(用于 .Net Core)。

该答案中缺少的是需要放入 ConfigureServices(..) 的完整代码(用于 .Net Core):

var inMemory = GlobalConfiguration.Configuration.UseMemoryStorage();
services.AddHangfire(x => x.UseStorage(inMemory));
Run Code Online (Sandbox Code Playgroud)