繁体   English   中英

如何在启动时删除所有 hangfire 重复作业?

[英]How to remove all hangfire recurring jobs on startup?

我正在考虑使用 Hangfire 作为重复作业的作业调度程序。 所以使用AddOrUpdate配置它们很简单,但是我该如何删除它呢? 我不想在删除该作业时使用RecurringJob.RemoveIfExists()污染我的代码,然后必须记住稍后将其删除。

有没有办法获取所有重复作业的列表并在服务器启动时删除它们,这样我的代码每次都会重新添加它们? 如果不行,有没有更好的办法?

例如

应用程序版本 1:添加了新的 Hangfire 循环作业Do something 1

应用程序版本 2:添加了新的 Hangfire 循环作业Do something 2Do Something 3

应用程序版本 3:删除了 Hangfire 重复作业Do something 2

问题:该作业仍将存在于服务器上并出现错误“无法加载类型...”,需要将其删除。

这个有点晚了,但希望它会帮助别人。 我陷入了同样的境地。 最后,关于HangFire 重复任务数据的答案帮助了我。

我使用JobStorage循环遍历所有重复性作业并依次删除每个作业,如下所示:

using (var connection = JobStorage.Current.GetConnection())
{
    foreach (var recurringJob in connection.GetRecurringJobs())
    {
        RecurringJob.RemoveIfExists(recurringJob.Id);
    }
}

我确信那里有更好的方法,但我找不到

保罗的回答很有帮助,但 API api 似乎已经改变。 使用 Hangfire 1.6.20 我需要从StorageConnectionExtensions获取重复性作业

using (var connection = JobStorage.Current.GetConnection()) 
{
    foreach (var recurringJob in StorageConnectionExtensions.GetRecurringJobs(connection)) 
    {
        RecurringJob.RemoveIfExists(recurringJob.Id);
    }
}

根据hangfire docs

public static void RemoveIfExists(
    string recurringJobId
)

使用此方法,您可以传递要删除的作业 ID。

RecurringJob.RemoveIfExists("exampleClassName.exampleFunctionName");

在 MongoDB 中,关于重复作业的数据存储在hangfire.stateData表中。 清除此表可以帮助您。

您可以使用此代码:

var recurringJobs = Hangfire.JobStorage.Current.GetConnection().GetRecurringJobs();

            foreach (var item in recurringJobs)
            {
                RecurringJob.RemoveIfExists(item.Id);
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM