我有一个控制台应用程序来测试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)
Qui*_*ith 20
对于NET Core(Web应用程序):
只是为了让它变得非常明显,因为这对我来说并不明显.
安装以下nuget包:
在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)
任何低于上述的东西,我的排队方法都没有开火.
为了完整起见,Hangfire 库的作者添加了一个名为Hangfire.InMemory
Nuget 上可用的版本的新包。存储库自述文件将其定位为针对生产用途。引用github 存储库 URL如下:“..Hangfire 的高效事务内存存储,其数据结构接近其最佳表示形式。此尝试的结果应该使该存储实现能够在生产环境中使用,并处理 in 的特定属性。 -记忆处理..”
熟悉的配置概念也适用于此:
GlobalConfiguration.Configuration.UseInMemoryStorage();
我个人添加如下:
services.AddHangfire(configuration => { configuration.UseInMemoryStorage(); });
正如 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)