如何在启动时删除所有 hangfire 重复作业?
How to remove all hangfire recurring jobs on startup?
我正在考虑使用 Hangfire 作为重复性作业的作业调度程序。所以使用 AddOrUpdate
配置它们很简单,但是我该如何删除它呢?我不想在删除该作业时用 RecurringJob.RemoveIfExists()
污染我的代码,然后必须记住稍后将其删除。
有没有办法获取所有重复作业的列表并在服务器启动时删除它们,这样我的代码每次都会重新添加它们?如果不行,有没有更好的办法?
例如
应用程序版本 1:添加了新的 Hangfire 循环作业 Do something 1
应用程序版本 2:添加了新的 Hangfire 循环作业 Do something 2
和 Do Something 3
应用程序版本 3:删除了 Hangfire 重复作业 Do something 2
问题:该作业仍将存在于服务器上,但出现错误"Could not load type...",需要删除。
这个有点晚了,但希望它能帮助其他人。我陷入了同样的境地。最后 上的答案帮助了我。
我使用 JobStorage
遍历所有重复作业并依次删除每个作业,如下所示:
using (var connection = JobStorage.Current.GetConnection())
{
foreach (var recurringJob in connection.GetRecurringJobs())
{
RecurringJob.RemoveIfExists(recurringJob.Id);
}
}
我确定有更好的出路,但我找不到
您可以使用此代码:
var recurringJobs = Hangfire.JobStorage.Current.GetConnection().GetRecurringJobs();
foreach (var item in recurringJobs)
{
RecurringJob.RemoveIfExists(item.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);
}
}
在 MongoDB 中,有关重复作业的数据存储在 hangfire.stateData
table 中。清除这个 table 可以帮助你。
根据 hangfire 文档
public static void RemoveIfExists(
string recurringJobId
)
使用此方法,您可以传递要删除的职位ID。
RecurringJob.RemoveIfExists("exampleClassName.exampleFunctionName");
我正在考虑使用 Hangfire 作为重复性作业的作业调度程序。所以使用 AddOrUpdate
配置它们很简单,但是我该如何删除它呢?我不想在删除该作业时用 RecurringJob.RemoveIfExists()
污染我的代码,然后必须记住稍后将其删除。
有没有办法获取所有重复作业的列表并在服务器启动时删除它们,这样我的代码每次都会重新添加它们?如果不行,有没有更好的办法?
例如
应用程序版本 1:添加了新的 Hangfire 循环作业 Do something 1
应用程序版本 2:添加了新的 Hangfire 循环作业 Do something 2
和 Do Something 3
应用程序版本 3:删除了 Hangfire 重复作业 Do something 2
问题:该作业仍将存在于服务器上,但出现错误"Could not load type...",需要删除。
这个有点晚了,但希望它能帮助其他人。我陷入了同样的境地。最后
我使用 JobStorage
遍历所有重复作业并依次删除每个作业,如下所示:
using (var connection = JobStorage.Current.GetConnection())
{
foreach (var recurringJob in connection.GetRecurringJobs())
{
RecurringJob.RemoveIfExists(recurringJob.Id);
}
}
我确定有更好的出路,但我找不到
您可以使用此代码:
var recurringJobs = Hangfire.JobStorage.Current.GetConnection().GetRecurringJobs();
foreach (var item in recurringJobs)
{
RecurringJob.RemoveIfExists(item.Id);
}
StorageConnectionExtensions
using (var connection = JobStorage.Current.GetConnection())
{
foreach (var recurringJob in StorageConnectionExtensions.GetRecurringJobs(connection))
{
RecurringJob.RemoveIfExists(recurringJob.Id);
}
}
在 MongoDB 中,有关重复作业的数据存储在 hangfire.stateData
table 中。清除这个 table 可以帮助你。
根据 hangfire 文档
public static void RemoveIfExists(
string recurringJobId
)
使用此方法,您可以传递要删除的职位ID。
RecurringJob.RemoveIfExists("exampleClassName.exampleFunctionName");