C# hangfire retry在RecCurringJob中是如何工作的?
我使用了Hangfire的循环作业来完成每分钟一次的cron表达式的长过程(因此基本上它每分钟都运行一次,以便在db中获取数据并进行一些处理),并且在失败时使用了Hangfire实现重试3 问题: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中重试是如何工作的?重复作业是否每分钟一次,重试是否将并行运行
- 我如何知道3的重试是否已经完成或已经到达(代码中)李>
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());