你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Durable Functions 版本概述

Durable FunctionsAzure FunctionsAzure WebJobs 的扩展,可用于在无服务器环境中编写有状态函数。 该扩展可用于管理状态、检查点和重启。 如果不熟悉 Durable Functions,请参阅 概述文档

Microsoft.Azure.WebJobs.Extensions.DurableTask v3.x

本部分介绍新的 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。

新的 Azure 存储 SDK

默认情况下,Durable Functions 使用 Azure 存储作为存储后端来持久保存应用程序状态。 在 WebJobs.Extensions.DurableTask v3 中,Azure 存储后端已升级为使用最新版本的 Azure 存储 SDK: Azure.Data.TablesAzure.Storage.BlobsAzure.Storage.Queues。 新的 Azure 存储 SDK 更安全,并且为托管标识提供增强的支持。 它们还提供更好的性能、更高效的数据处理和其他最新存储功能。

提高了 Azure 存储后端的成本效益

Azure 存储后端中,分区管理器负责在辅助角色之间分配 分区/控制队列 。 WebJobs.Extensions.DurableTask v3 包默认使用分区管理器 V3,这是一种利用 Azure 表来管理分区分配而不是 Azure Blob 租约的新设计。 此设计可以显著降低存储成本,同时简化调试。 使用分区管理器 V3 时,在存储帐户中创建名为Partitions的新表”,使你能够轻松检查分区信息。

删除了对 Functions v1 运行时的支持

WebJobs.Extensions.DurableTask v3 不再支持 Azure Functions 运行时版本 1.x,支持该版本计划于 2026 年 9 月结束。 如果必须使用 Functions 运行时 v1,请使用低于 v2.11.0 的 Durable Functions 扩展版本。 请记住,在计划的支持终止时间到来时,Durable Functions 也会放弃对运行时版本1的支持。

.NET Framework 更新

WebJobs.Extensions.DurableTask v3 将 .NET Framework 从 .NET Core 3.1 更新为 .NET 6,提供改进的性能并增强与新式 .NET 功能和库的兼容性。 此更新与 Azure Functions 扩展捆绑包的未来版本保持一致。

从 WebJobs.Extensions.DurableTask v2.x 迁移到 v3.x

从 WebJobs.Extensions.DurableTask v2.x 迁移到 v3.x 旨在简单明了,无需更改代码,因为更改位于后台。 只需更新依赖项即可开始利用 v3.x 中的新功能和改进。

注释

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 或更高版本。

v2.x 的支持和维护

WebJobs.Extensions.DurableTask v2.x 继续接收安全更新和 bug 修复,确保现有应用程序保持安全稳定。 但是,所有新功能和增强功能都专门添加到 v3.x。 因此,应尽快升级到 WebJobs.Extensions.DurableTask v3,以利用最新的功能和正在进行的改进。

Microsoft.Azure.WebJobs.Extensions.DurableTask v2.x 中的新功能

本部分介绍在版本 2.x 中添加的 Durable Functions 的功能。

注释

本部分不适用于 dotnet 隔离辅助角色中的 Durable Functions。 为此,请参阅 持久函数独立进程概述

持久实体

在 Durable Functions 2.x 中,我们引入了新的 实体函数 概念。

实体函数定义读取和更新较小状态片段(称为“持久实体”)的操作。 与业务流程协调程序函数类似,实体函数是具有特殊触发器类型“实体触发器”的函数。 与业务流程协调程序函数不同,实体函数没有任何特定的代码约束。 实体函数还会显式管理状态,而不是通过控制流隐式表示状态。

若要了解详细信息,请参阅 持久实体 文章。

持久 HTTP

在 Durable Functions 2.x 中,我们引入了一项新的 Durable HTTP 功能,允许你:

  • 从编排函数直接调用 HTTP API(有一些记录在案的限制)。
  • 实现自动客户端 HTTP 202 状态轮询。
  • Azure 托管标识的内置支持。

若要了解详细信息,请参阅 HTTP 功能 文章。

从 1.x 迁移到 2.x

本部分介绍如何将现有版本 1.x Durable Functions 迁移到版本 2.x,以利用新功能。

升级扩展

在项目中安装 Durable Functions 绑定扩展的最新 2.x 版本。

JavaScript、Python 和 PowerShell

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

更新 .NET 项目以使用最新版本的 Durable Functions 绑定扩展

有关详细信息,请参阅 注册 Azure Functions 绑定扩展

更新代码

Durable Functions 2.x 引入了多项重大更改。 Durable Functions 1.x 应用程序与 Durable Functions 2.x 不兼容,无需更改代码。 本部分列出了将版本 1.x 函数升级到 2.x 时必须进行的一些更改。

Host.json 架构

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 默认值,也可以遵循 零停机时间部署指南 ,详细了解如何处理正在进行的业务流程的重大更改。

公共接口更改(仅限.NET)

在版本 1.x 中,Durable Functions 支持的各种 上下文 对象具有用于单元测试的抽象基类。 作为 Durable Functions 2.x 的一部分,这些抽象基类将替换为接口。

下表表示主要更改:

1.x 2.x
DurableOrchestrationClientBase IDurableOrchestrationClientIDurableClient
DurableOrchestrationContextDurableOrchestrationContextBase IDurableOrchestrationContext
DurableActivityContextDurableActivityContextBase IDurableActivityContext
OrchestrationClientAttribute DurableClientAttribute

在抽象基类包含虚拟方法的情况下,这些虚拟方法已被定义的 DurableContextExtensions扩展方法替换。

function.json 更改

在 Durable Functions 1.x 中,业务流程客户端绑定使用的 typeorchestrationClient。 版本 2.x 改用 durableClient

引发事件更改

在 Durable Functions 1.x 中,调用 引发事件 API 并指定不存在的实例会导致无提示故障。 从 2.x 开始,将事件引发到不存在的业务流程会导致异常。