Durable Functions 版本和迁移指南

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

版本摘要

版本 地位 密钥更改
v3.x 当前(推荐) 更新了 Azure 存储 SDK,提高了成本效益,无需更改代码以从 v2.x 升级
v2.x 维护(仅限安全和漏洞修复) 持久实体,Durable HTTP
v1.x 支持的结束 2026 年 9 月 Legacy

v3.x 中的新增功能

Microsoft.Azure。WebJobs.Extensions.DurableTask v3 包(后续部分中称为 WebJobs.Extensions.DurableTask)是当前建议的版本。 从 v2.x 升级不需要更改代码 - 只需更新包依赖项。 对于运行使用 进程内模型的 Durable C# 应用的客户,此更新才会被视为重大变更。

注意

Durable Functions 的 .NET 跨进程包 Microsoft.Azure.Functions.Worker.Extensions.DurableTask 引用了 Microsoft.Azure.WebJobs.Extensions.DurableTask 作为其基础程序集。 因此,此更新也适用于 Microsoft.Azure.Functions.Worker.Extensions.DurableTask,从版本 1.2.x 开始。

更新了 Azure 存储 SDK

默认情况下,Durable Functions使用Azure 存储作为存储后端来持久保存应用程序状态。 在 WebJobs.Extensions.DurableTask v3 中,Azure 存储后端已升级为使用最新版本的 Azure 存储 SDK: Azure.Data.TablesAzure.Storage.BlobsAzure.Storage.Queues。 与 v2.x 中使用的旧Microsoft.Azure.Storage.*包相比,这些 SDK 增强了对托管标识的支持、更好的性能、更高效的数据处理和改进的安全性。

提升了成本效益(Azure 存储提供者)

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

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

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

.NET运行时目标版本更新

WebJobs.Extensions.DurableTask v3 将目标运行时从 .NET Core 3.1 更新到 .NET 6,从而提高了性能和与新式.NET功能和库的兼容性。 此更新与Azure Functions扩展捆绑包的未来版本保持一致。

从 v2.x 迁移到 v3.x

从 v2.x 迁移到 v3.x 无需更改代码,只需更新依赖项即可开始使用新功能。

更新到 Azure Functions 扩展捆绑包版本 4.22.0 或更高版本。

降级兼容性(v3.x 到 v2.x)

与 v2(UTF-8)相比,WebJobs.Extensions.DurableTask v3 对 Azure 存储 SDK(Base64)使用不同的文本编码。 如果需要从 v3.x 还原到 v2.x,请使用以下最低版本来确保向后兼容性:

  • In-process model:v2.13.5 或更高版本。
  • Isolated worker model:v1.1.5 或更高版本(如果是从 v1.2.x 或更高版本还原)。

还原到低于 4.22.0 的扩展捆绑包版本。

v2.x 的支持和维护

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

v2.x 中引入的功能

Durable Functions 2.x 及更高版本中提供了以下功能,适用于所有支持的语言。

注意

本节中进程内的 .NET API 详细信息不适用于独立工作进程模型。 有关隔离工作者的指南,请参阅 Durable Functions 独立进程概述

持久实体

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

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

持久 HTTP

Durable Functions包括一个持久 HTTP 功能,让你可以:

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

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

从 1.x 迁移到 2.x

Important

Azure Functions运行时版本 1.x 将于 2026年9月 结束支持。 如果仍在 v1.x 上,请尽快规划迁移。

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

升级“Durable Functions”扩展

在项目中安装 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)"
    }
}

Durable Functions 2.x 可在 Azure 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 扩展捆绑包 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)"
    }
}

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

Durable Functions中的公共接口更改

在版本 1.x 中,Durable Functions支持的各种 context 对象具有用于单元测试的抽象基类。 作为 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 开始,将事件引发到不存在的业务流程会导致异常。