首页 > 解决方案 > Azure 函数偶尔会运行两次

问题描述

我有一个在每周一早上 8 点运行一次的计时器上运行的 Powershell 函数——它发送电子邮件。它大部分时间都运行良好,但每隔一段时间它就会运行两次:

在此处输入图像描述

第二个实例在第一个实例完成的确切时间运行。

我用谷歌搜索了这个问题,大多数文章都围绕着runatstartup=true。我从来没有在任何地方设置过,并且检查了函数应用程序配置和 function.json 并且找不到任何提及它。

标签: azure-functions

解决方案


文档

编写无状态函数

如果可能,函数应该是无状态和幂等的。将任何所需的状态信息与您的数据相关联。例如,正在处理的订单可能有关联的状态成员。函数可以根据该状态处理订单,而函数本身保持无状态。

幂等函数特别推荐与定时器触发器一起使用。例如,如果您有绝对必须每天运行一次的东西,请将其编写为可以在一天中的任何时间运行并获得相同的结果。当某一天没有工作时,该功能可以退出。此外,如果上一次运行未能完成,下一次运行应该从它停止的地方继续。

您可能还应该阅读有关可重入的 wiki

Azure 函数保证至少一次消息传递,因此在某些(尽管希望很少)情况下可以多次执行。

对于您的问题,这意味着跟踪已发送的电子邮件。函数运行时之外的某个地方(即:存储帐户)。当函数在同一天或同一周(取决于您的要求)开始时,从它离开的地方开始。

这是最佳实践的原因。由于您正在运行作业,因此在运行代码时可能会发生任何事情。服务器可能会崩溃,网络可能会出现故障,您的功能可能会移动到不同的主机,打补丁,...


推荐阅读