C# hangfire retry在RecCurringJob中是如何工作的?

C# hangfire retry在RecCurringJob中是如何工作的?,c#,.net,asp.net-mvc,hangfire,C#,.net,Asp.net Mvc,Hangfire,我使用了Hangfire的循环作业来完成每分钟一次的cron表达式的长过程(因此基本上它每分钟都运行一次,以便在db中获取数据并进行一些处理),并且在失败时使用了Hangfire实现重试3 问题: 在Hangfire中重试是如何工作的?重复作业是否每分钟一次,重试是否将并行运行 我如何知道3的重试是否已经完成或已经到达(代码中) 我想知道重试是否已经到达的原因是,我需要对Hangfire的重复作业正在处理的数据库中的数据进行处理 注意:查看仪表板以了解重试不是我在此的选项,而是通过代码。可能

我使用了Hangfire的循环作业来完成每分钟一次的cron表达式的长过程(因此基本上它每分钟都运行一次,以便在db中获取数据并进行一些处理),并且在失败时使用了Hangfire实现重试3

问题:

  • 在Hangfire中重试是如何工作的?重复作业是否每分钟一次,重试是否将并行运行
  • 我如何知道3的重试是否已经完成或已经到达(代码中)
我想知道重试是否已经到达的原因是,我需要对Hangfire的重复作业正在处理的数据库中的数据进行处理

注意:查看仪表板以了解重试不是我在此的选项,而是通过代码。可能吗

实施:

public class HangfireImpl
    {
        public static void ConfigureHangfire(IAppBuilder app, string dashBoardName, string connectionString)
        {
            GlobalJobFilters.Filters.Add(new AutomaticRetryAttribute { Attempts = 3 });
            GlobalConfiguration.Configuration
                    .UseSqlServerStorage(connectionString)
                    .UseDashboardMetric(SqlServerStorage.ActiveConnections)
                    .UseDashboardMetric(SqlServerStorage.TotalConnections)
                    .UseDashboardMetric(DashboardMetrics.FailedCount);

            app.UseHangfireDashboard(string.Format(@"/{0}", dashBoardName));
            app.UseHangfireServer();
        }

        public static void InitializeJobs()
        {
            // is there a way to find out how many retry occured inside my service.Execute?
            RecurringJob.AddOrUpdate<Worker>(service => service.Execute(), Cron.Minutely);
        }
    }
公共类
{
公共静态void配置hangfire(IAppBuilder应用程序、字符串仪表板名称、字符串连接字符串)
{
GlobalJobFilters.Filters.Add(新的AutomaticRetryAttribute{Attempts=3});
全局配置
.UseSqlServerStorage(连接字符串)
.UseDashboardMetric(SqlServerStorage.ActiveConnections)
.UseDashboardMetric(SqlServerStorage.TotalConnections)
.UseDashboardMetric(DashboardMetrics.FailedCount);
app.UseHangfireDashboard(string.Format(@/{0}),dashBoardName));
app.UseHangfireServer();
}
公共静态void InitializeJobs()
{
//是否有办法确定我的服务中发生了多少次重试。执行?
RecurringJob.AddOrUpdate(service=>service.Execute(),Cron.Minutely);
}
}

我可能已经解决了自己的问题

问题:

在Hangfire中重试是如何工作的?他每分钟都在工作 重试将并行运行吗

我想答案是肯定的,只要他们的员工可以执行你的工作

我如何知道是否已完成或达到重试3 已经(在代码中)了吗

我实现了JobFilterAttribute和IElectStateFilter,并使用hangfire的全局过滤器进行注册:

public class JobStateFilter : JobFilterAttribute , IElectStateFilter 
{
     public void OnStateElection(ElectStateContext context)
     {
          var failedState = context.CandidateState as FailedState;

           if (failedState == null) return;

          // I capture failed context here after 3 retry              
     }
}

GlobalJobFilters.Filters.Add(new JobStateFilter());