具有计时器触发器的Azure函数:UnscheduledInvocationReason

时间:2020-07-27 13:06:27

标签: azure timer azure-functions

在我的Azure函数中,我有26个函数,只有7个带有计时器触发器(请参见我的previous post,我也看到了这个other post,但它已经很旧了)。没有关于此的Microsoft建议。某些功能具有计时器触发器,并且在该过程结束时,每个功能都会发送一封电子邮件。我有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 * * *"
}

假设我早上没有收到任何电子邮件,我检查了Application Insights,也没有找到与计时器功能相关的任何日志。

然后,我在门户中打开“ Azure功能”,单击一个功能,然后神奇地收到了电子邮件。在日志中,我发现了类似以下内容的日志:

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

enter image description here

正如一个小伙子在我上一篇文章的评论中所建议的那样,计时器触发功能将发生冲突并且无法启动。似乎很烦人。我还在Github上开了一个问题。

Azure函数中是否存在有关计时器触发函数的准则?有人遇到过与我相同的问题吗?

2 个答案:

答案 0 :(得分:1)

对于这个问题,我认为这可能是由一个功能应用程序中的多个功能引起的,正如您之前提到的那样。我在一个功能应用中遇到了http触发功能和计时器触发功能的类似问题。代码非常简单(我确认代码中没有错误),但是无法按时触发计时器触发功能。

Here是我遇到的类似问题的帖子。解决方法是在不同的功能应用程序中创建功能。对于您的问题,我认为您可以如上所述在不同的功能应用程序中创建功能,也可以按照此page的步骤在Azure门户上获得支持票。天蓝色的支持团队将为您提供帮助,因为他们可以查看该功能的更多日志详细信息。我认为很难在堆栈溢出社区获得想要的帮助。

答案 1 :(得分:0)

如果它在应用服务计划中,则需要确保已启用始终在线。默认情况下,该功能已在Function Apps中启用,但最好再次检查。

消费模式中,没有“始终在线”之类的东西。而是应在计时器到期时自动唤醒您的Function App。为此,您的触发器需要“同步”。

有关对计时器触发的功能应用进行故障排除的更多详细信息,请参阅此article