如果隊列已經入隊,是否有一種簡單方法可以阻止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