Для Hangfire, есть ли пример кода для непростых задач; и как должны обрабатываться повторяющиеся задачи при повторной публикации? - PullRequest
0 голосов
/ 29 января 2020

Я подумываю использовать Hangfire https://www.hangfire.io для замены старого домашнего расписания ASP. NET веб-сайт / приложение.

Я создал простой тестовый проект используя Hangfire. Я могу начать проект с Hangfire, отправить (в коде) пару очень простых однократных и повторяющихся задач, просмотреть панель инструментов и т. Д. c.

Я ищу дополнительные предложения для создания немного более сложный код (и классы) для запланированных задач, и у меня есть вопрос о том, что происходит с постоянно запланированными задачами при повторной публикации сайта Hangfire в рабочей среде.

Я прочитал некоторую документацию по сайт Hangfire, просмотрел 2 учебника, отсканировал форумы Hangfire и немного поискал в StackOverflow и в Интернете. Многое из того, что я видел, показывает, как запланировать что-то очень простое (например, Console.WriteLine), но ничего более сложного. Учебное пособие «Highlighter» было полезным, но оно, по сути, показывает, как запланировать один экземпляр (чуть более продолжительного) задания в ответ на интерактивный ввод данных пользователем. Я понимаю, насколько это может быть полезно, но меня больше интересуют повторяющиеся задачи, которые отправляются и затем выполняются каждый день (или каждый час и т. Д. c.) И не требуют повторной отправки. Этими задачами могут быть что-то вроде отправки электронной почты пользователям каждую ночь, пакетной обработки некоторых данных, импорта ночной подачи внешних данных, периодического вызова веб-службы для выполнения какой-либо обработки и т. Д. c.

Имеется ли какой-либо пример кода, который показывает некоторые примеры, подобные этому, или какое-либо руководство по наиболее подходящему подходу для структурирования такого кода в интерфейсе и классе (ах)?

Во-вторых, в моем случае, большинство из задачи будут «постоянными» (всегда существующими как повторяющиеся задачи). Если я настрою код для добавления их в качестве повторяющихся задач вскоре после запуска приложения Hangfire в рабочей среде, как мне следует обращаться с ним при публикации обновлений в рабочей среде (когда эта же инициализация будет выполняться снова)? Должен ли я просто вызвать «AddOrUpdate» с тем же идентификатором, и Hangfire позаботится об этом? Должен ли я сначала вызвать «RemoveIfExists», а затем снова добавить повторяющуюся задачу? Есть ли какой-то другой подход, который следует использовать?

1 Ответ

0 голосов
/ 30 января 2020

В качестве примера можно привести уборщик журналов, который будет запускаться каждый рабочий день в 17:00 для удаления журналов старше 5 дней.

public void Schedule()
{
    RecurringJob.AddOrUpdate<LogJanitor>(
        "Janitor - Old Logs", 
        j => j.OnSchedule(null),
        "0 17 * * 1,2,3,4,5", 
        TimeZoneInfo.FindSystemTimeZoneById("CST"));
}

Тогда мы будем обрабатывать это таким образом

public void OnSchedule(
    PerformContext context)
{
    DateTime timeStamp = DateTime.Today.AddDays(-5);
    _logRepo.FindAndDelete(from: DateTime.MinValue, to: timeStamp);
}

Эти два метода объявлены внутри класса LogJanitor. Когда наше приложение запускается, мы получаем экземпляр этого класса и затем вызываем Schedule().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...