是否有一种简单的方法可以阻止hangfire.io作业入队,如果已经入队了?
查看jobfilterattribute,没有什么比如何获取服务器上的任何状态更突出。我可以使用连接对象并查询商店吗?
由于
答案 0 :(得分:1)
请图书馆老板https://gist.github.com/odinserj/a8332a3f486773baa009
查看以下要点这样可以通过查询指纹防止同一作业多次出现。
您可以通过使用属性[DisableMultipleQueuedItemsFilter]
修饰方法来为每个后台作业激活它。
或者您可以全局启用GlobalJobFilters.Filters.Add(new DisableMultipleQueuedItemsFilter());
答案 1 :(得分:0)
我正在使用以下代码块来检查是否添加新作业,具体取决于其当前状态:(我知道我目前只查看前1000个作业。您可以实现您的逻辑类型))
private static bool IsOKToAddJob(string JobName, string QueueName, out string NotOKKey)
{
try
{
var monapi = JobStorage.Current.GetMonitoringApi();
var processingJobs = monapi.ProcessingJobs(0, 1000);
NotOKKey = processingJobs.Where(j => j.Value.Job.ToString() == JobName).FirstOrDefault().Key;
if (!string.IsNullOrEmpty(NotOKKey)) return false;
var scheduledJobs = monapi.ScheduledJobs(0, 1000);
NotOKKey = scheduledJobs.Where(j => j.Value.Job.ToString() == JobName).FirstOrDefault().Key;
if (!string.IsNullOrEmpty(NotOKKey)) return false;
var enqueuedJobs = monapi.EnqueuedJobs(QueueName, 0, 1000);
NotOKKey = enqueuedJobs.Where(j => j.Value.Job.ToString() == JobName).FirstOrDefault().Key;
if (!string.IsNullOrEmpty(NotOKKey)) return false;
NotOKKey = null;
return true;
}
catch (Exception ex)
{
//LOG your Exception;
}
}
用法很简单:
if (IsOKToAddJob(YOURJOBNAME, QueueName, out NOTOKKey))
var id = BackgroundJob.Enqueue(() =>YOURMETHOD());
//rest