问题描述
我有一个 Azure Durable Function (v3),我计划在周六 20:30(晚上 8:30)运行。周日早上我看到它没有运行,所以我安排它在星期一 20:30 运行。我通过使用新的 TimerTrigger 设置部署新的 zip 包来做到这一点。该应用程序在星期一运行,但它没有执行我想要它做的所有工作。在周三 13:00 左右,我添加了一些日志记录并安排应用在每天 20:30 运行:
public async Task Start([TimerTrigger("0 30 20 * * *")] TimerInfo timerInfo,[DurableClient] IDurableorchestrationClient starter,ILogger log)
{
// ...
}
我今天(星期四早上)检查过,该功能没有启动。我在 Azure 存储上打开了日志,我只看到了周一的运行:
2021-04-19T20:30:00.058 [@R_376_4045@ion] Executing 'KreptdIntegration_Start' (Reason='Timer fired at 2021-04-19T20:30:00.0215809+00:00',Id=8c40e15b-a740-4956-a6e6-b90b8fe95f3a)
2021-04-19T20:30:00.338 [@R_376_4045@ion] Started orchestration with ID = 'kreptdintegrationsingleinstance'.
2021-04-19T20:30:00.364 [@R_376_4045@ion] Executed 'KreptdIntegration_Start' (Succeeded,Id=8c40e15b-a740-4956-a6e6-b90b8fe95f3a,Duration=331ms)
在 Azure 门户中函数的监视器部分,我也只看到有关周一运行的信息:
为什么函数没有触发?是不是我安排的功能太晚了? (我安排在 13:00 左右运行,在当天 20:30 运行。如果它是用 C# 编写并作为包部署的函数,是否可以从 Azure 门户手动触发该函数?
解决方法
为确保新触发器正常工作,它需要同步。您可以通过以下三种方式之一同步触发器:
- 在 Azure 门户中重新启动函数应用
- 使用主密钥向
https://{functionappname}.azurewebsites.net/admin/host/synctriggers?code=<API_KEY>
发送 HTTP POST 请求。 - 向
https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.Web/sites/<FUNCTION_APP_NAME>/syncfunctiontriggers?api-version=2016-08-01
发送 HTTP POST 请求。
将占位符替换为您的订阅 ID、资源组名称和函数应用的名称。