1

我开发了具有多个计时器触发功能的 .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 表达式,那么它会按预期工作。但我想从 appsettings.json 文件中读取 CRON 表达式信息,然后将其传递给上述两个函数。

因此,任何人都可以建议从 Azure WebJob 项目的 Functions.cs 文件中的 appsettings.json 读取 CRON 表达式信息的正确方法。

4

1 回答 1

0

我认为动机是从编译后的代码中获取时间表,而无需重新编译和重新部署即可对其进行更改。

这可能不是最优雅的解决方案 - 但您可以将两个函数放入两个不同的预定 WebJobs。然后你可以为每个设置一个单独的 settings.job。

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

外部 settings.job 文件部署到 WebJob exe 所在的文件夹 - 通常是 D:\home\site\wwwroot\App_Data\jobs\triggered\WebJobName - 您可以在那里更改计划。

要拥有不同的时间表 - 您必须拆分为不同的 WebJobs,因为 settings.job 时间表正在启动 Main,而不是像 [TimerTrigger] 这样的特定功能。

在计划的作业中,Main 中的代码如下所示:

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

其中“ManualTrigger”是 Functions.cs 中的函数。settings.jobs 中的计划启动 Main,运行该功能,然后关闭。

于 2020-05-09T18:59:17.563 回答