部署产品后,Hangfire自动启动所有重复性作业

时间:2020-04-30 02:36:03

标签: c# asp.net .net asp.net-core hangfire

我在生产中遇到了Hangfire的严重问题,这种情况偶尔会发生,但非常令人担忧。

我正在将Hangfire与.Net Core 2.1一起使用

在部署我的Hangfire作业后,我所有的重复作业都会自动启动,这不是我期望的。还有其他人注意到吗?

我无法解决此问题,请帮助 预先感谢。

1 个答案:

答案 0 :(得分:0)

根据我的经验,这通常是因为以前的作业失败了,所以Hangfire有机会自动重试它们。 (您可以通过在数据库中查找处于Failed状态的作业来检查是否是这种情况。)

如果需要,可以使用多种方法来修改此行为:

如果您不想重试作业,请放置一个显式属性,其最大重试次数值为0:

[AutomaticRetry(Attempts = 0)]
public void BackgroundMethod()
{
}

使用相同的方式将尝试次数限制为不同的值。如果要更改默认的全局值,请添加一个新的全局过滤器:

GlobalJobFilters.Filters.Add(new AutomaticRetryAttribute { Attempts = 5 });

如果使用的是ASP.NET Core,则可以使用IServiceCollection扩展方法AddHangfire。请注意,AddHangfire使用GlobalJobFilter实例,因此依赖项应为Transient或Singleton。

services.AddHangfire((provider, configuration) =>
{
   configuration.UseFilter(provider.GetRequiredService<AutomaticRetryAttribute>());
}

参考:Dealing with exceptions