如果队列已经入队,是否有一种简单方法可以阻止hangfire.io作业入队?如果已经入队,请停止Hangfire作业排队
看着jobfilterattribute,没有什么突出的如何获得服务器上的任何东西的状态。我可以使用连接对象并查询商店吗?
感谢
如果队列已经入队,是否有一种简单方法可以阻止hangfire.io作业入队?如果已经入队,请停止Hangfire作业排队
看着jobfilterattribute,没有什么突出的如何获得服务器上的任何东西的状态。我可以使用连接对象并查询商店吗?
感谢
我使用下面的代码块进行检查,增加新的就业与否,取决于其当前状态。(我知道,我目前看只有前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
有趣的解决方案,但因为我必须在紧密交易中排队,我不想在客户端进行查询。也许我可以在属性中做到这一点。谢谢! – William
当我调用'IsOKToAddJob'时,如何获得'YOURJOBNAME'? – akshayKhot
另一种选择是'DisableConcurrentExecution'属性。它有一个必需的'timeoutInSeconds'参数。 – aethercowboy
这只会让他们一次处理一个,而不是我想要实现的。 – William