Hangfire 重复作业每 30 分钟运行一次,但仍未完成
Hangfire Recurring job runs every 30 minutes while it's still unfinished
我正在使用 Hangfire 来完成 运行 大约需要 2 小时的作业。我注意到每 30 分钟作业重新发生一次,而前一个作业仍在工作。因此,如果我有一个在特定时间开始的作业 A,则在 30 分钟后,另一个作业 A 将开始 运行ning,而前一个作业仍处于处理状态。
配置服务():
services.AddHangfire(config => config
.UseSimpleAssemblyNameTypeSerializer()
.UseDefaultTypeSerializer()
.UseMemoryStorage());
services.AddHangfireServer();
配置():
app.UseHangfireDashboard();
RecurringJob.AddOrUpdate<ISender>(i => i.A(), Cron.Daily(8, 0), timeZone: TimeZoneInfo.Local);
我已经检查了 运行 的方法是否有错误、异常等,只是为了确保不会因此重试作业。经过大量测试,我认为情况并非如此。
如有任何帮助,我们将不胜感激
我不确定这是否正确,但它解决了我的问题。
这是由 UseMemoryStorage() 在 ConfigureServices() 中引起的。
传递如下例所示的选项将限制作业在默认情况下 30 分钟后或选项中指示的任何内容后重新出现。
var options = new MemoryStorageOptions
{
FetchNextJobTimeout = TimeSpan.FromHours(10)
};
services.AddHangfire(config => config.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseDefaultTypeSerializer()
.UseMemoryStorage(options));
我正在使用 Hangfire 来完成 运行 大约需要 2 小时的作业。我注意到每 30 分钟作业重新发生一次,而前一个作业仍在工作。因此,如果我有一个在特定时间开始的作业 A,则在 30 分钟后,另一个作业 A 将开始 运行ning,而前一个作业仍处于处理状态。
配置服务():
services.AddHangfire(config => config
.UseSimpleAssemblyNameTypeSerializer()
.UseDefaultTypeSerializer()
.UseMemoryStorage());
services.AddHangfireServer();
配置():
app.UseHangfireDashboard();
RecurringJob.AddOrUpdate<ISender>(i => i.A(), Cron.Daily(8, 0), timeZone: TimeZoneInfo.Local);
我已经检查了 运行 的方法是否有错误、异常等,只是为了确保不会因此重试作业。经过大量测试,我认为情况并非如此。
如有任何帮助,我们将不胜感激
我不确定这是否正确,但它解决了我的问题。
这是由 UseMemoryStorage() 在 ConfigureServices() 中引起的。
传递如下例所示的选项将限制作业在默认情况下 30 分钟后或选项中指示的任何内容后重新出现。
var options = new MemoryStorageOptions
{
FetchNextJobTimeout = TimeSpan.FromHours(10)
};
services.AddHangfire(config => config.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseDefaultTypeSerializer()
.UseMemoryStorage(options));