Как прочитать выражение Cron из appsettings.json в основных веб-заданиях .Net

Я разработал проект .Net Core 2.2 Azure Web Job, который имеет несколько функций запуска таймера. Одна функция запускается каждые 15 минут, а другая — каждые 10 минут.

  public async Task GetRecordsFromCosmosDBCollection_0([TimerTrigger("0 0/15 * * * *")]TimerInfo timerInfo){
   //Custom Business Logic
  }
  public async Task GetRecordsFromCosmosDBCollection_1([TimerTrigger("0 0/10 * * * *")]TimerInfo timerInfo){
   //Custom Business Logic
  }

Если бы я использовал выражение CRON непосредственно в параметрах функции, то оно работало бы так, как ожидалось. Но я хочу прочитать информацию о выражении CRON из файла appsettings.json, а затем передать ее двум вышеуказанным функциям.

Итак, может ли кто-нибудь предложить правильный подход к чтению информации о выражении CRON из appsettings.json в файле Functions.cs в проекте Azure WebJob.


person Pradeep    schedule 30.04.2020    source источник


Ответы (1)


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

Возможно, это не самое элегантное решение, но вы можете поместить две функции в два разных запланированных веб-задания. Затем вы можете установить для каждого отдельный файл settings.job.

https://docs.microsoft.com/en-us/azure/app-service/webjobs-create#CreateScheduledCRON

Внешний файл settings.job развертывается в папке, где находится исполняемый файл WebJob — обычно D:\home\site\wwwroot\App_Data\jobs\triggered\WebJobName — и вы можете изменить расписание там.

Чтобы иметь разные расписания — вам придется разделить на разные веб-задания, потому что расписание settings.job запускает Main, а не конкретную функцию, такую ​​​​как [TimerTrigger].

В запланированном задании код в Main будет выглядеть так:

    await host.StartAsync();
    await jobHost.CallAsync("ManualTrigger", inputs);
    await host.StopAsync();

где "ManualTrigger" — это функция в файле Functions.cs. Расписание в settings.jobs запускает Main, запускает функцию, а затем выключается.

person jefftrotman    schedule 09.05.2020
comment
Я знаю этот путь. Но я хочу передать другое выражение CRON из файла appsettings.json, используя NameResolver. Поскольку Single WebJob содержит несколько функций. - person Pradeep; 11.05.2020