Durable Functions 是 Azure Functions 和 Azure WebJobs 的扩展,可用于在无服务器环境中编写有状态函数。 该扩展可用于管理状态、检查点和重启。 如果不熟悉 Durable Functions,请参阅 概述文档。
本部分介绍新的 Microsoft.Azure.WebJobs.Extensions.DurableTask v3 包(后续部分中称为 WebJobs.Extensions.DurableTask),并提供有关其更新和更改的详细信息。 对于运行使用 进程内模型 的 Durable C# 应用程序的客户,此更新才会被视作重大变更。
注意
Durable Functions .NET 的进程外包 Microsoft.Azure.Functions.Worker.Extensions.DurableTask,引用了 Microsoft.Azure.WebJobs.Extensions.DurableTask 作为其基础程序集。 因此,此更新也适用于从版本 1.2.x 开始的 Microsoft.Azure.Functions.Worker.Extensions.DurableTask。
默认情况下,Durable Functions 使用 Azure 存储作为存储后端来持久保存应用程序状态。 在 WebJobs.Extensions.DurableTask v3 中,Azure 存储后端已升级为使用最新版本的 Azure 存储 SDK: Azure.Data.Tables、 Azure.Storage.Blobs 和 Azure.Storage.Queues。 新的 Azure 存储 SDK 更安全,并且为托管标识提供增强的支持。 它们还提供更好的性能、更高效的数据处理和其他最新存储功能。
在 Azure 存储后端中,分区管理器负责在辅助角色之间分配 分区/控制队列 。 WebJobs.Extensions.DurableTask v3 包默认使用分区管理器 V3,这是一种利用 Azure 表来管理分区分配而不是 Azure Blob 租约的新设计。 此设计可以显著降低存储成本,同时简化调试。 使用分区管理器 V3 时,在存储帐户中创建名为“Partitions
”,使你能够轻松检查分区信息。
WebJobs.Extensions.DurableTask v3 不再支持 Azure Functions 运行时版本 1.x,支持该版本计划于 2026 年 9 月结束。 如果必须使用 Functions 运行时 v1,请使用低于 v2.11.0 的 Durable Functions 扩展版本。 请记住,在计划的支持终止时间到来时,Durable Functions 也会放弃对运行时版本1的支持。
WebJobs.Extensions.DurableTask v3 将 .NET Framework 从 .NET Core 3.1 更新为 .NET 6,提供改进的性能并增强与新式 .NET 功能和库的兼容性。 此更新与 Azure Functions 扩展捆绑包的未来版本保持一致。
从 WebJobs.Extensions.DurableTask v2.x 迁移到 v3.x 旨在简单明了,无需更改代码,因为更改位于后台。 只需更新依赖项即可开始利用 v3.x 中的新功能和改进。
- 对于 .NET 进程内用户:更新到 Microsoft.Azure.WebJobs.Extensions.DurableTask 3.0.0 或更高版本。
- 对于 .NET 隔离用户:更新到 Microsoft.Azure.Functions.Worker.Extensions.DurableTask 1.2.0 或更高版本。
- 对于具有扩展捆绑包的其他语言的用户:从版本 4.22.0 开始,在扩展捆绑包中支持 Durable Functions v3。
注意
WebJobs.Extensions.DurableTask v3 使用最新版本的 Azure 存储 SDK,它与 v2 使用的文本编码有差异:v3 使用 Base64 编码,而 v2 使用 UTF-8 编码。 如果需要从 v3.x 降级到 v2.x,若要确保向后兼容性,请使用至少 v2.13.5。 对于具有 Microsoft.Azure.Functions.Worker.Extensions.DurableTask 的 .NET 进程外用户,如果从 v1.2.x 或更高版本还原,请降级到 v1.1.5 或更高版本。
WebJobs.Extensions.DurableTask v2.x 继续接收安全更新和 bug 修复,确保现有应用程序保持安全稳定。 但是,所有新功能和增强功能都专门添加到 v3.x。 因此,应尽快升级到 WebJobs.Extensions.DurableTask v3,以利用最新的功能和正在进行的改进。
本部分介绍在版本 2.x 中添加的 Durable Functions 的功能。
注意
本部分不适用于 dotnet 隔离辅助角色中的 Durable Functions。 为此,请参阅 持久函数独立进程概述。
在 Durable Functions 2.x 中,我们引入了新的 实体函数 概念。
实体函数定义读取和更新较小状态片段(称为“持久实体”)的操作。 与业务流程协调程序函数类似,实体函数是具有特殊触发器类型“实体触发器”的函数。 与业务流程协调程序函数不同,实体函数没有任何特定的代码约束。 实体函数还会显式管理状态,而不是通过控制流隐式表示状态。
若要了解详细信息,请参阅 持久实体 文章。
在 Durable Functions 2.x 中,我们引入了一项新的 Durable HTTP 功能,允许你:
- 从编排函数直接调用 HTTP API(有一些记录在案的限制)。
- 实现自动客户端 HTTP 202 状态轮询。
- 对 Azure 托管标识的内置支持。
若要了解详细信息,请参阅 HTTP 功能 文章。
本部分介绍如何将现有版本 1.x Durable Functions 迁移到版本 2.x,以利用新功能。
在项目中安装 Durable Functions 绑定扩展的最新 2.x 版本。
Durable Functions 2.x 在 Azure Functions 扩展捆绑包的版本 2.x 中开始可用。
Durable Functions 中的 Python 支持需要 Durable Functions 2.x 或更高版本。
若要更新项目中的扩展捆绑包版本,请打开 host.json 并更新 extensionBundle
分区以使用版本 4.x([4.*, 5.0.0)
)。
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
注意
如果在更改扩展捆绑版本后 Visual Studio Code 未显示正确的模板,请通过运行 开发人员:重载窗口 命令(Windows 和 Linux 上的 Ctrl+R 、macOS 上的 Command+R )重新加载窗口。
Durable Functions 2.x 从 Azure Functions 扩展捆绑包的 4.x 版开始可用。 必须使用 Azure Functions 4.0 运行时来执行 Java 函数。
若要更新项目中的扩展捆绑包版本,请打开 host.json 并更新 extensionBundle
分区以使用版本 4.x([4.*, 5.0.0)
)。
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
更新 .NET 项目以使用最新版本的 Durable Functions 绑定扩展。
有关详细信息,请参阅 注册 Azure Functions 绑定扩展 。
Durable Functions 2.x 引入了多项重大更改。 Durable Functions 1.x 应用程序与 Durable Functions 2.x 不兼容,无需更改代码。 本部分列出了将版本 1.x 函数升级到 2.x 时必须进行的一些更改。
Durable Functions 2.x 使用新的 host.json 架构。 1.x 的主要更改包括:
-
存储特定的配置的
"storageProvider"
(和"azureStorage"
子节)。 -
"tracing"
用于跟踪和日志记录配置。 -
"notifications"
(和"eventGrid"
子部分)用于事件网格通知配置。
有关详细信息 ,请参阅 Durable Functions host.json 参考文档 。
在版本 1.x 中,如果未在 host.json中指定任务中心名称,则默认为“DurableFunctionsHub”。 在版本 2.x 中,默认任务中心名称现在派生自函数应用的名称。 因此,如果在升级到 2.x 时尚未指定任务中心名称,则代码将使用新的任务中心运行,并且所有正在进行的业务流程将不再具有应用程序处理它们。 若要解决此问题,可以将任务中心名称显式设置为“DurableFunctionsHub”的 v1.x 默认值,也可以遵循 零停机时间部署指南 ,详细了解如何处理正在进行的业务流程的重大更改。
在版本 1.x 中,Durable Functions 支持的各种 上下文 对象具有用于单元测试的抽象基类。 作为 Durable Functions 2.x 的一部分,这些抽象基类将替换为接口。
下表表示主要更改:
1.x | 2.x |
---|---|
DurableOrchestrationClientBase |
IDurableOrchestrationClient 或 IDurableClient |
DurableOrchestrationContext 或 DurableOrchestrationContextBase |
IDurableOrchestrationContext |
DurableActivityContext 或 DurableActivityContextBase |
IDurableActivityContext |
OrchestrationClientAttribute |
DurableClientAttribute |
在抽象基类包含虚拟方法的情况下,这些虚拟方法已被定义的 DurableContextExtensions
扩展方法替换。
在 Durable Functions 1.x 中,业务流程客户端绑定使用的 type
为 orchestrationClient
。 版本 2.x 改用 durableClient
。
在 Durable Functions 1.x 中,调用 引发事件 API 并指定不存在的实例会导致无提示故障。 从 2.x 开始,将事件引发到不存在的业务流程会导致异常。