在我的Azure函数中,我有26个函数,只有7个带有计时器触发器(请参见我的previous post,我也看到了这个other post,但它已经很旧了)。没有关于此的Microsoft建议。某些功能具有计时器触发器,并且在该过程结束时,每个功能都会发送一封电子邮件。我有2种类型的计时器触发器:
我要面对的问题是必须在特定时间启动的功能。基本上,直到我打开门户并在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 * * *"
}
假设我早上没有收到任何电子邮件,我检查了Application Insights,也没有找到与计时器功能相关的任何日志。
然后,我在门户中打开“ Azure功能”,单击一个功能,然后神奇地收到了电子邮件。在日志中,我发现了类似以下内容的日志:
触发器详细信息:UnscheduledInvocation原因:IsPastDue,原始时间表:2020-07-24T05:00:00.0000000 + 00:00
正如一个小伙子在我上一篇文章的评论中所建议的那样,计时器触发功能将发生冲突并且无法启动。似乎很烦人。我还在Github上开了一个问题。
Azure函数中是否存在有关计时器触发函数的准则?有人遇到过与我相同的问题吗?
答案 0 :(得分:1)
对于这个问题,我认为这可能是由一个功能应用程序中的多个功能引起的,正如您之前提到的那样。我在一个功能应用中遇到了http触发功能和计时器触发功能的类似问题。代码非常简单(我确认代码中没有错误),但是无法按时触发计时器触发功能。
Here是我遇到的类似问题的帖子。解决方法是在不同的功能应用程序中创建功能。对于您的问题,我认为您可以如上所述在不同的功能应用程序中创建功能,也可以按照此page的步骤在Azure门户上获得支持票。天蓝色的支持团队将为您提供帮助,因为他们可以查看该功能的更多日志详细信息。我认为很难在堆栈溢出社区获得想要的帮助。
答案 1 :(得分:0)
如果它在应用服务计划中,则需要确保已启用始终在线。默认情况下,该功能已在Function Apps中启用,但最好再次检查。
在消费模式中,没有“始终在线”之类的东西。而是应在计时器到期时自动唤醒您的Function App。为此,您的触发器需要“同步”。
有关对计时器触发的功能应用进行故障排除的更多详细信息,请参阅此article。