持久函数是否会唤醒直到事件被调用?
我是关于实现调度程序的,而是使用其他库,例如 Hangfire 或 Quartz。我想实现作为调度程序的持久功能。 我缺少的部分是,函数中发生了什么?该函数是否会在下一个事件调用之前得到提示?每一个都叫执行?
[FunctionName("SchedulerRouter")]
public static async Task<HttpResponseMessage> HttpStart(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")]HttpRequestMessage req,
[OrchestrationClient]DurableOrchestrationClient starter, ILogger log)
{
var data = await req.Content.ReadAsAsync<JObject>();
var instanceId = await starter.StartNewAsync(FunctionsConsts.MAIN_DURABLE_SCHEDULER_NAME, data);
return starter.CreateCheckStatusResponse(req, instanceId);
}
最佳答案
看起来您将执行时间与 Azure 函数的最大不活动时间混淆了:
持久功能只与单次调用的最大执行时间有关。对于“开箱即用”功能,超时为 10 分钟,对于持久功能,此限制被消除。它还引入了对有状态执行的支持,这意味着对同一函数的后续调用可以共享局部变量和静态成员。这是“开箱即用”功能模式的扩展,需要一些额外的样板代码才能使一切按预期工作。更多详细信息请参见:https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-overview
持久函数和普通函数共享相同的计费模式,因此持久函数也会发生冷启动,尤其是在消耗计划中运行时。
在消耗计划中运行的 Azure 函数将在不活动期间关闭,然后在新请求到达时重新分配并重新启动,这称为:冷启动。您可以通过构建一个计时器触发函数来缓解这种情况,该函数每 5 到 10 分钟唤醒您的函数。但是,如果 Azure 自动扩展或缩小主机规模,您仍然会时不时地发生冷启动。 如果您想完全消除冷启动的可能性,您将必须转向应用程序服务计划。附带说明一下,Azure 中的 Function 应用在设计上是无状态的,您应该在实现逻辑时牢记这一要求。
关于c# - Azure Functions 和 Azure Durable Function 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57745784/