在我的开发环境中,我有一个具有21个功能的Azure功能,应用程序计划是消耗性的。
某些功能具有计时器触发器,并且在过程结束时,每个功能都会发送一封电子邮件。我有2种类型的计时器触发器:
该功能每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功能。
打开显示器的功能
鲸鱼,几秒钟后,我开始收到所有服务的电子邮件!在生产环境中,我没有开发人员拥有的所有功能,因为我想在部署之前进行测试。在生产过程中,这些功能可以正常运行,并在正确的时间启动。
如果我查看Application Insights,则只能找到打开监视器时的日志。
日志中有一件有趣的事情:
触发器详细信息:UnscheduledInvocation原因:IsPastDue,原始时间表:2020-07-24T05:00:00.0000000 + 00:00
显然,在同一Azure函数中,您不能有多个计时器触发器。我在Github上发布了一个问题,因此如果其他开发人员也面临同样的问题。与HTTP触发器类似,请看post。
答案 0 :(得分:0)
功能应用程序中的功能太多,它们可能会相互影响。我遇到了类似的问题,在这种情况下,计时器触发功能在一个功能应用程序中不起作用。但是,当我将它们部署到不同功能的应用程序时,它们可以正常工作。因此您可以尝试将第二个功能部署到另一个功能应用程序。
我建议您向Microsoft报告此问题,他们可以了解有关此问题的更多信息,并且可能有更好的解决方案。