作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Hangfire 的重复工作来完成我的长进程,每分钟都有 cron 表达式(所以基本上它每分钟运行一次以在数据库中获取数据并进行一些处理)并且我在失败时使用 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);
}
}
最佳答案
我可能已经解决了自己的问题。
问题:
How does retry works inside Hangfire? Does recurring job every minute and the retry will run in parallel?
我想答案是是,只要他们有可用的 worker 来执行您的工作。
and how would I know if the retry of 3 is already done or reached already (In code)?
我实现了 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());
关于c# - hangfire 重试如何在 recuringjob 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34308605/
我使用 Hangfire 的重复工作来完成我的长进程,每分钟都有 cron 表达式(所以基本上它每分钟运行一次以在数据库中获取数据并进行一些处理)并且我在失败时使用 Hangfire 实现重试 3。
我是一名优秀的程序员,十分优秀!