Каждый раз, когда я развертываю свое приложение, я удаляю все повторяющиеся задания и снова добавляю их, как показано ниже:
JobStorage.Current.GetConnection().GetRecurringJobs().ForEach(x => RecurringJob.RemoveIfExists(x.Id));
....
MyJobs.ForEach(x => RecurringJob.AddOrUpdate<....
Мне нужно сделать это, чтобы обойти проблемы с активацией, когда я меняю номер версии своего сборки с каждым развертыванием и после развертывания «MyAssembly, 2.0.0.0» исходные записи с «MyAssembly, 1.0.0.0» больше не активируются правильно, поэтому после каждого выпуска (фактически при каждом перезапуске пула приложений) я удаляю повторяющиеся задания и меняю расписание их. Все хорошо и хорошо.
Я хочу начать выполнять свои задания на веб-ферме, и мне бы хотелось, чтобы этот код, который удаляет задания и повторно добавляет их, выполнялся один раз для каждой «среды», а не один раз на сервер Hangfire, чтобы несколько серверов не конкурировали и добавляли одни и те же задания снова и снова.
Я, вероятно, мог бы обозначить один экземпляр как «лидер» через настройку web.config, и только лидер будет выполнять планирование рабочих мест, но что, если мой «лидер» не подключится к сети после развертывания. Я также хотел бы, чтобы все мои файлы конфигурации были идентичны, и чтобы мне не приходилось настраивать один как «лидер» в моем CD pipiline.
Как лучше всего справиться с этим сценарием? Hangfire?