我在生产中遇到了Hangfire的严重问题,这种情况偶尔会发生,但非常令人担忧。
我正在将Hangfire与.Net Core 2.1一起使用
在部署我的Hangfire作业后,我所有的重复作业都会自动启动,这不是我期望的。还有其他人注意到吗?
我无法解决此问题,请帮助 预先感谢。
答案 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>()); }