Hangfire自动重试 - 如何手动配置重试之间的时间

时间:2017-11-24 13:36:15

标签: hangfire

我需要手动配置重试之间的时间。我无法找到方法。

但我找到了来自https://github.com/HangfireIO/Hangfire/blob/master/src/Hangfire.Core/AutomaticRetryAttribute.cs

的代码

在完成最大重试次数后调度作业。

public static readonly int DefaultRetryAttempts = 10;

我已将上面的属性DefaultRetryAttemts更改为3而不是10,然后它还会为单个作业重试10次

  

'重试尝试7 of 10:导入数据时出错'

我的要求是进行5次重试尝试,并在每次重试后提供20分钟的延迟。

3 个答案:

答案 0 :(得分:0)

此功能已在Hangfire中继中合并,应在1.7版中提供。见the pull request

您可以查看拉取请求并检索AutomaticRetryAttribute的代码以构建您自己的自定义属性。

答案 1 :(得分:0)

This feature已合并到1.7 beta版。对于想尽早使用该功能的人,请将new AutomaticRetryAttribute code复制到您的项目中,将其重命名为AutomaticRetryExtAttribute并将这两个属性都应用于您的工作。

[AutomaticRetry(Attempts = 0)]用于防止它在失败时重新计划作业。这很重要,因为我们希望AutomaticRetryExt来处理重新安排。

[AutomaticRetry(Attempts = 0)]
[AutomaticRetryExt(Attempts = 30, DelaysInSeconds=new int[] { 300 })]
public static async Task Download(string fileName)
{
}

答案 2 :(得分:0)

如果您想将其设为全局,可以通过在启动配置中添加全局过滤器来实现:

GlobalJobFilters.Filters.Add(new AutomaticRetryAttribute { Attempts = 5, DelaysInSeconds = new int[] { 300 } });

您甚至可以通过以下方式指定每个重试超时:

DelaysInSeconds = new int[] { 300, 400, 500, 600, 700 }