У меня есть ситуация, когда мне требуется повторяющаяся работа, зарегистрированная с помощью hangfire для запуска на каждом сервере в кластере.hangfire повторяющаяся работа на каждом сервере
(задание скопировать некоторые файлы локально, поэтому потребность регулярно работать на каждом сервере)
До сих пор я пытался регистрировать ту же работу с идентификатором имени сервера, в результате п задания для п серверов:
RecurringJob.AddOrUpdate(Environment.MachineName,() => CopyFiles(Environment.MachineName), Cron.MinuteInterval(_delay));
и сама работа проверяет, является ли это правильный сервер и только что-то делает, если он:
public static void CopyFiles(string taskId)
{
if (string.IsNullOrWhiteSpace(taskId) || !taskId.Equals(Environment.MachineName))
{
return;
}
// do stuff here if it matches our taskname
}
проблема с этим состоит в том, что все рабочие места execut es на первом сервере, который должен совпадать, помечается как завершенный и в результате не выполняется другими серверами.
Есть ли способ гарантировать, что задание выполняется на всех серверах?
или есть способ гарантировать, что только один сервер может обрабатывать задание? т.е. задайте задание на сервере, который его создал
Я искал противоположность этому, но вопрос, помог мне, как вы сказал, что это возможно. – Zapnologica