你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Durable Functions( Azure Functions 的一项功能)在无服务器环境中编写有状态函数。 Durable Functions 的适用场景包括协调微服务和工作流、扇出/扇入等有状态模式,以及长期任务。
可以将 Durable Task Scheduler 用作 Durable Functions 的后端,以存储业务流程和实体运行时状态。
在本快速入门中,请执行以下操作:
- 将现有的 Durable Functions 应用配置为使用 Durable Task Scheduler。
- 设置用于本地开发的 Durable Task 模拟器。
- 使用 Visual Studio Code 在应用服务计划中将应用部署到 Azure。
- 在 Durable Task Scheduler 仪表板上监视应用和任务中心的状态。
注释
持久任务计划程序目前仅支持在 Functions 高级和应用服务计划中运行的 Durable Functions。
先决条件
本快速入门假定本地计算机上已有一个 Azure Functions 项目,其中包含:
如果不满足这些先决条件,建议从以下快速入门之一开始设置本地 Functions 项目:
用户还需要:
添加持久任务计划程序包
使用 dotnet add package 命令安装最新版本的 Microsoft.Azure.Functions.Worker.Extensions.DurableTask.AzureManaged 包:
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.DurableTask.AzureManaged --prerelease
注释
Durable Task Scheduler 扩展需要 Microsoft.Azure.Functions.Worker.Extensions.DurableTask 或更高版本 1.2.2 。
在 host.json中,更新 extensionBundle 属性以使用包含 Durable Task Scheduler 包的预览版本:
{
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle.Preview",
    "version": "[4.29.0, 5.0.0)"
  }
}
更新 host.json
按如下所示更新 host.json,以使用 Durable Task Scheduler 作为后端。
{
  "extensions": {
    "durableTask": {
      "hubName": "%TASKHUB_NAME%",
      "storageProvider": {
        "type": "azureManaged",
        "connectionStringName": "DURABLE_TASK_SCHEDULER_CONNECTION_STRING"
      }
    }
  }
}
配置 local.settings.json
添加用于本地开发的连接信息:
{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "<DEPENDENT ON YOUR PROGRAMMING LANGUAGE>",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "DURABLE_TASK_SCHEDULER_CONNECTION_STRING": "Endpoint=http://localhost:8080;Authentication=None",
    "TASKHUB_NAME": "default"
  }
}
设置 Durable Task 模拟器
- 拉取包含模拟器的 Docker 映像。 - docker pull mcr.microsoft.com/dts/dts-emulator:latest
- 运行模拟器。 - docker run -d -p 8080:8080 -p 8082:8082 mcr.microsoft.com/dts/dts-emulator:latest- 以下输出指示模拟器已成功启动。   
- 记下 Docker 桌面上公开的端口。 计划程序出于不同目的公开多个端口: - 
              8080:可实现让应用连接到计划程序的 gRPC 终结点
- 
              8082:持久任务计划程序仪表板的终结点
   
- 
              
本地测试
- 转到应用的根目录并启动 Azurite。 - azurite start
- 运行该应用程序。 - func start- 你应该会在应用中看到函数的列表。 如果您是按照 Durable Functions 的快速入门教程之一创建的应用程序,那么应该会看到类似以下的输出:   
- 复制 URL 值 - statusQueryGetUri并将其粘贴到浏览器的地址栏中。 应在业务流程实例上看到状态:- { "name": "DurableFunctionsOrchestrationCSharp1", "instanceId": "b50f8b723f2f44149ab9fd2e3790a0e8", "runtimeStatus": "Completed", "input": null, "customStatus": null, "output": [ "Hello Tokyo!", "Hello Seattle!", "Hello London!" ], "createdTime": "2025-02-21T21:09:59Z", "lastUpdatedTime": "2025-02-21T21:10:00Z" }
- 若要查看有关业务流程实例的更多详细信息,请转到 http://localhost:8082/ 访问持久任务计划程序仪表板。 
- 单击 默认 任务中心以查看其仪表板。 
在 Azure 中运行应用
创建所需资源
按照 Function App 集成创建流在 Azure 上创建 Durable Task Scheduler 实例和 Azure Functions 应用。 此过程将自动设置基于身份的访问,并配置应用程序访问计划程序所需的环境变量。
- 导航到“函数应用创建”边栏选项卡,然后选择 Functions Premium 或 应用服务 作为托管选项。   
- 在 “创建函数应用”(应用服务) 边栏选项卡中,填写“ 基本信息 ”选项卡中的信息。   - 领域 - DESCRIPTION - 订阅 - 选择 Azure 订阅。 - 资源组 - 选择现有资源组,或单击“ 新建 ”以创建新资源组。 - 函数应用名称 - 为函数应用创建唯一名称。 - 是否要部署代码或容器映像? - 保持选中“代码”选项。 - 运行时堆栈 - 选择用于本快速入门的运行时。 - 版本 - 选择运行时堆栈版本。 - 区域 - 选择其中 一个受支持的区域。 - 操作系统 - 选择操作系统。 
- 选择“ Durable Functions ”选项卡。 
- 选择 持久任务计划程序 作为持久函数的后端提供程序。 
- 创建调度器资源。 此操作会自动创建任务中心。   - 领域 - DESCRIPTION - 存储后端 - 选择 持久任务计划程序。 - 区域 - 建议调度程序和函数应用的区域应保持一致。 - 持久任务计划程序 - 使用提供的计划程序名称,或单击“ 新建 ”以创建自定义名称。 - 计划 - 目前仅提供 专用 。 - 容量单位 - 目前,只能选择一个容量单位作为选项。 
- 单击“ 查看 + 创建 ”以查看资源创建。 - 系统将自动创建具有所需角色访问控制(RBAC)权限的用户分配托管标识,并将其添加到函数应用中。 可以在摘要视图中找到与托管标识资源相关的信息,例如: - 分配给它的角色(持久任务数据参与者) 
- 范围限定为任务中心级别的分配   
 
- 验证通过后单击创建。 
资源部署可能需要大约 15 到 20 分钟。 完成后,即可将应用部署到 Azure。
将函数应用部署到 Azure
重要
部署到现有函数应用始终会覆盖 Azure 中该应用的内容。
- 在命令面板中,输入并选择“Azure Functions: 部署到函数应用”。 
- 选择你刚才创建的函数应用。 当系统提示覆盖以前的部署时,请选择“部署”,将函数代码部署到新的函数应用资源。 
- 部署完成后,选择“查看输出”,以查看创建和部署结果,其中包括已创建的 Azure 资源。 如果错过了通知,请选择右下角的铃铛图标再次查看。   
Functions Premium 计划中的应用
如果应用在 Functions Premium 计划中运行,请在部署后启用 运行时缩放监视 设置,以确保应用根据负载自动缩放:
az resource update -g <resource_group> -n <function_app_name>/config/web --set properties.functionsRuntimeScaleMonitoringEnabled=1 --resource-type Microsoft.Web/sites
测试函数应用
运行以下命令以获取函数的 URL:
az functionapp function list --resource-group <RESOURCE_GROUP_NAME> --name <FUNCTION_APP_NAME>  --query '[].{Function:name, URL:invokeUrlTemplate}' --output json
检查业务流程状态
检查持久任务计划程序仪表板上的业务流程实例和活动详细信息的状态。 访问仪表板需要登录。
注释
以下说明展示了针对特定任务中心的角色分配。 如果需要在计划程序中访问所有任务集线器,请在计划程序级别上执行分配。
- 导航到门户上的持久任务计划程序资源。 
- 单击任务中心名称。 
- 在左侧菜单中,选择“访问控制(IAM)”。 
- 单击“ 添加” 以添加角色分配。   
- 搜索并选择“持久任务数据参与者”。 单击 “下一步” 。   
- 在“成员”选项卡中,对于“将访问权限分配给”,请选择“用户、组或服务主体”。 
- 对于“成员”,单击“+ 选择成员”。 
- 在 “选择成员 ”窗格中,搜索姓名或电子邮件:   
- 选择电子邮件并单击 “选择 ”按钮。 
- 单击“ 查看 + 分配 ”完成角色分配。 
- 分配角色后,单击任务中心资源的左侧菜单中的 “概述 ”,并导航到位于“ Essentials ”顶部的仪表板 URL。 
清理资源
如果你不再需要为完成本快速入门而创建的资源,为避免在 Azure 订阅中产生相关费用,请删除资源组和所有相关资源。
后续步骤
- 详细了解持久任务计划程序仪表板。
- 排查在使用持久任务计划程序时可能会遇到的任何错误。