Enr*_*ico 5 c# azure azure-functions
在我的开发环境中,我有一个包含 21 个函数的 Azure Functions,应用程序计划是消费。
一些函数有一个定时器触发器,在过程结束时每个函数都会发送一封电子邮件。我有两种类型的定时器触发器:
每 20 分钟,该函数就会按照我的预期执行。伟大的。
我面临的问题是他们必须在特定时间启动的功能。基本上,直到我打开门户并在 Azure Function 上执行某些操作(例如打开其中一个的监视器)后,它们才会启动。
从代码的角度来看,所有带有定时器触发器的函数都是这样定义的:
[FunctionName("invoiceMonthlyGeneratorTimer")]
public void Run([TimerTrigger("%Timers:GenerateMonthlyInvoices%")] TimerInfo myTimer)
{
// ..
}
[FunctionName("invoiceDunningTimer")]
public async Task Run([TimerTrigger("%Timers:DunningTimer%")] TimerInfo timer)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
定时器的配置在设置文件中,如:
"Timers": {
"DunningTimer": "0 0 4 * * *",
"GenerateMonthlyInvoices": "0 0 4 * * *"
}
Run Code Online (Sandbox Code Playgroud)
一般来说,这种方法适用于开发环境,并且在生产环境中运行良好。
因为每个函数都会发送一封电子邮件,所以我希望每天早上都能在我的收件箱中找到一些电子邮件,但这并没有发生。然后,我打开 Azure 门户查看日志和监视器。
在门户中打开 Azure 功能。
打开一个函数的监视器
瞧,几秒钟后,我开始收到所有服务的电子邮件!在生产环境中,我没有在 dev 中拥有的所有功能,因为我想在部署之前进行测试。在 prod 中,功能运行良好,并在正确的时间启动。
如果我查看 Application Insights,我只能找到打开监视器时的日志。
日志中有一件有趣的事情:
触发详情:UnscheduledInvocationReason:IsPastDue,OriginalSchedule:2020-07-24T05:00:00.0000000+00:00
显然,在同一个 Azure Functions 中不能有多个计时器触发器。我在Github上打开了一个问题,所以如果其他开发人员面临同样的问题。类似于 HTTP 触发器的东西,看看这篇文章。
您的函数应用程序中的函数太多,它们可能会相互交互。我遇到了类似的问题,在这种情况下,计时器触发器在一个功能应用程序中起作用并且不起作用。但是当我将它们部署到不同的功能应用程序时,它们工作得很好。因此您可以尝试将第二个函数部署到另一个函数应用程序。
而且我建议你将这个问题报告给微软,他们可以了解更多关于这个问题的信息,并且可能有更好的解决方案。
| 归档时间: |
|
| 查看次数: |
961 次 |
| 最近记录: |