c# - Azure Functions 和 Azure Durable Function 之间有什么区别

标签 c# azure .net-core azure-functions azure-durable-functions

持久函数是否会唤醒直到事件被调用?

我是关于实现调度程序的,而是使用其他库,例如 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/

相关文章:

c# - 通过标记为网络钓鱼的 Gmail 发送电子邮件

azure - 如何在变量中使用 Azure Arm 模板输出?

azure - 为什么不同的 Microsoft Graph API 返回不同的数据

c# - Serilog 异步文件日志记录 - 如何添加滚动

node.js - Visual Studio 生成的 Dockerfile 在 npm 安装/dotnet 发布步骤上失败

c# - .Net 4.5中Async/Await的简单解释

c# - 获取接口(interface)但不是基础接口(interface)

c# - 如何将 ActiveDirectoryMembershipProvider 与 ASP.NET Identity 一起使用?

python-3.x - python 包未通过 CI/CD 管道安装,导入错误,找不到包

linux - 如何在 Debian Jessie 中安装 dotnet core sdk