Как работает повторная попытка Hangfire в повторном задании?

Я использовал повторяющееся задание Hangfire для выполнения моего длительного процесса с выражением cron каждую минуту (так что в основном он запускается каждую минуту для получения данных в базе данных и выполнения некоторой обработки), и я использовал повторную попытку реализации 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);
        }
    }

person jtabuloc    schedule 16.12.2015    source источник


Ответы (1)


Возможно, я уже сам решаю свои проблемы.

Вопросов :

Как повторная попытка работает в 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());
person jtabuloc    schedule 02.02.2016