Azure功能:计时器触发器和消耗计划问题

时间:2020-07-24 07:49:20

标签: azure azure-functions

在我的开发环境中,我有一个具有21个功能的Azure功能,应用程序计划是消耗性的。

某些功能具有计时器触发器,并且在过程结束时,每个功能都会发送一封电子邮件。我有2种类型的计时器触发器:

  • 每20分钟运行一次功能
  • 在晚上的特定时间运行一次功能

该功能每20分钟执行一次我期望的工作。很好。

我要面对的问题是必须在特定时间启动的功能。基本上,直到我打开门户并在Azure功能上执行某些操作(例如,打开其中一个的监视器)后,它们才会启动。

从代码的角度来看,带有计时器触发器的所有功能的定义如下:

[FunctionName("invoiceMonthlyGeneratorTimer")]
public void Run([TimerTrigger("%Timers:GenerateMonthlyInvoices%")] TimerInfo myTimer)
{
    // ..
}

[FunctionName("invoiceDunningTimer")]
public async Task Run([TimerTrigger("%Timers:DunningTimer%")] TimerInfo timer)
{
    // ...
}

计时器的配置位于设置文件中,例如:

"Timers": {
    "DunningTimer": "0 0 4 * * *",
    "GenerateMonthlyInvoices": "0 0 4 * * *"
}

通常来说,这种方法在开发环境中有效,并且在生产环境中完美运行。

由于每个功能都会发送一封电子邮件,我希望每天早晨在收件箱中找到一些电子邮件,但是不会发生。然后,我打开Azure门户以查看日志和监视器。

在门户中打开Azure功能。

enter image description here

打开显示器的功能

enter image description here

鲸鱼,几秒钟后,我开始收到所有服务的电子邮件!在生产环境中,我没有开发人员拥有的所有功能,因为我想在部署之前进行测试。在生产过程中,这些功能可以正常运行,并在正确的时间启动。

如果我查看Application Insights,则只能找到打开监视器时的日志。

enter image description here

日志中有一件有趣的事情:

触发器详细信息:UnscheduledInvocation原因:IsPastDue,原始时间表:2020-07-24T05:00:00.0000000 + 00:00

enter image description here

更新

显然,在同一Azure函数中,您不能有多个计时器触发器。我在Github上发布了一个问题,因此如果其他开发人员也面临同样的问题。与HTTP触发器类似,请看post

1 个答案:

答案 0 :(得分:0)

功能应用程序中的功能太多,它们可能会相互影响。我遇到了类似的问题,在这种情况下,计时器触发功能在一个功能应用程序中不起作用。但是,当我将它们部署到不同功能的应用程序时,它们可以正常工作。因此您可以尝试将第二个功能部署到另一个功能应用程序。

我建议您向Microsoft报告此问题,他们可以了解有关此问题的更多信息,并且可能有更好的解决方案。