github.com/HangfireIO/Hangfire/pull/502

я есть ситуация, когда мне нужно повторять задание, зарегистрированное в Hangfire, для запуска на каждом сервере в кластере.

(Задача состоит в том, чтобы скопировать некоторые файлы локально, поэтому необходимо регулярно запускать на каждом сервере)

До сих пор я пытался зарегистрировать ту же работу с идентификатором имени сервера, в результате чего n работ для n серверов:

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
}

Проблема заключается в том, что все задания выполняются на первом сервере, помеченном как выполненное, и в результате не выполняются другими серверами.

Есть ли способ убедиться, что задание выполняется на всех серверах?

или есть способ гарантировать, что только один сервер может обрабатывать задание? т.е. нацелить задание на сервер, который его создал

Ответы на вопрос(1)

Ваш ответ на вопрос