Azure Functions Durable Extension开发者指南从配置到部署的完整流程【免费下载链接】azure-functions-durable-extensionDurable Task Framework extension for Azure Functions项目地址: https://gitcode.com/gh_mirrors/az/azure-functions-durable-extensionAzure Functions Durable Extension 是微软官方提供的强大扩展用于在 Azure Functions 平台上构建可靠、有状态的应用程序。本指南将带您从零开始全面了解如何配置、开发和部署基于 Durable Functions 的应用程序帮助您快速掌握这一革命性的无服务器编排技术。 什么是 Azure Functions Durable ExtensionAzure Functions Durable Extension 为 Azure Functions 添加了三个核心功能类型彻底改变了无服务器计算的范式编排器函数Orchestrator Functions- 长期运行的工作流函数负责调度和协调其他函数活动函数Activity Functions- 无状态的工作单元执行具体的业务逻辑实体函数Entity Functions- 类似 Actor 模型的有状态函数具有明确的身份和状态管理这些功能让您能够构建复杂的业务流程同时保持无服务器架构的弹性和可扩展性优势。 环境准备与项目配置系统要求.NET SDK建议使用 .NET 6.0 或更高版本Azure Functions Core Tools用于本地开发和调试Visual Studio Code或Visual Studio推荐开发环境Azure 订阅用于部署和测试创建新项目使用 Azure Functions Core Tools 创建新项目# 创建新的函数应用项目 func init MyDurableFunctionsApp --worker-runtime dotnet # 进入项目目录 cd MyDurableFunctionsApp # 添加 Durable Functions 扩展 func extensions install --package Microsoft.Azure.WebJobs.Extensions.DurableTask --version 2.10.0配置 host.json 文件在项目根目录下的host.json文件中配置 Durable Task 扩展{ version: 2.0, extensions: { durableTask: { hubName: MyTaskHub, storageProvider: { type: AzureStorage, connectionStringName: AzureWebJobsStorage }, tracing: { distributedTracingEnabled: true, traceReplayEvents: false } } } }️ 核心概念与架构设计编排模式详解Durable Functions 支持多种编排模式让您能够处理各种复杂的业务场景1. 函数链模式Function Chaining顺序执行一系列活动函数每个函数的输出作为下一个函数的输入。2. 扇出/扇入模式Fan-out/Fan-in并行执行多个活动函数然后聚合所有结果。3. 异步 HTTP API 模式启动长时间运行的操作通过 HTTP 轮询或 Webhook 获取结果。4. 监控模式Monitoring定期检查某个条件直到满足特定条件或超时。5. 人工交互模式Human Interaction等待外部事件如人工审批后再继续执行。存储后端选择Durable Functions 支持多种存储后端Azure Storage最常用的后端提供可靠的持久化存储Netherite高性能内存存储后端适合高吞吐量场景MSSQL使用 SQL Server 作为存储后端自定义存储提供程序实现自定义存储逻辑 开发实战指南创建第一个编排器函数在samples/precompiled/HelloSequence.cs中您可以看到一个简单的编排器函数示例[FunctionName(E1_HelloSequence)] public static async TaskListstring Run( [OrchestrationTrigger] IDurableOrchestrationContext context) { var outputs new Liststring(); outputs.Add(await context.CallActivityAsyncstring(E1_SayHello, Tokyo)); outputs.Add(await context.CallActivityAsyncstring(E1_SayHello, Seattle)); outputs.Add(await context.CallActivityAsyncstring(E1_SayHello_DirectInput, London)); return outputs; }活动函数实现活动函数是编排器调用的工作单元[FunctionName(E1_SayHello)] public static string SayHello([ActivityTrigger] IDurableActivityContext context) { string name context.GetInputstring(); return $Hello {name}!; }HTTP 启动器函数创建 HTTP 触发器来启动编排[FunctionName(HttpStart)] public static async TaskHttpResponseMessage Run( [HttpTrigger(AuthorizationLevel.Anonymous, post)] HttpRequestMessage req, [DurableClient] IDurableOrchestrationClient starter, ILogger log) { string instanceId await starter.StartNewAsync(E1_HelloSequence, null); log.LogInformation($Started orchestration with ID {instanceId}.); return starter.CreateCheckStatusResponse(req, instanceId); } 本地开发与调试配置本地设置在local.settings.json中配置本地开发环境{ IsEncrypted: false, Values: { AzureWebJobsStorage: UseDevelopmentStoragetrue, FUNCTIONS_WORKER_RUNTIME: dotnet, MyTaskHubName: TestTaskHub } }启动本地开发服务器# 启动 Azure Storage EmulatorWindows AzureStorageEmulator.exe start # 启动函数应用 func start调试技巧使用 Durable Functions 监控界面访问http://localhost:7071/runtime/webhooks/durabletask查看编排状态日志记录在编排器和活动函数中添加详细的日志重试策略配置重试逻辑处理暂时性故障 部署到 Azure部署前准备创建 Azure 资源组创建存储账户用于 Durable Functions 状态存储创建函数应用选择适当的定价层部署方法方法一使用 Visual Studio 发布右键点击项目 → 选择发布选择 Azure 目标配置发布设置并部署方法二使用 Azure CLI# 创建资源组 az group create --name MyResourceGroup --location eastus # 创建存储账户 az storage account create --name mystorageaccount --location eastus --resource-group MyResourceGroup --sku Standard_LRS # 创建函数应用 az functionapp create --resource-group MyResourceGroup --consumption-plan-location eastus --runtime dotnet --functions-version 4 --name MyDurableFunctionApp --storage-account mystorageaccount # 部署代码 func azure functionapp publish MyDurableFunctionApp方法三使用 GitHub Actions创建.github/workflows/deploy.ymlname: Deploy to Azure Functions on: push: branches: [ main ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkoutv2 - name: Setup .NET uses: actions/setup-dotnetv1 with: dotnet-version: 6.0.x - name: Publish run: dotnet publish --configuration Release --output ./publish - name: Deploy to Azure Functions uses: Azure/functions-actionv1 with: app-name: MyDurableFunctionApp publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }} 监控与运维Application Insights 集成启用 Application Insights 以获得完整的可观测性{ logging: { applicationInsights: { samplingSettings: { isEnabled: true, excludedTypes: Request } } } }分布式跟踪Durable Functions 支持分布式跟踪帮助您理解复杂的编排流程健康检查与诊断状态查询 API使用IDurableOrchestrationClient.GetStatusAsync()获取编排状态历史记录查看IDurableOrchestrationContext.History获取执行历史自定义遥测添加自定义指标和日志 安全最佳实践身份验证与授权函数级授权使用AuthorizationLevel控制访问托管身份使用 Azure 托管身份访问其他 Azure 服务密钥管理将敏感信息存储在 Azure Key Vault 中网络安全虚拟网络集成将函数应用部署到 VNet 中私有端点使用私有端点访问存储账户网络策略配置适当的网络访问规则 性能优化存储优化分区策略合理设计 Task Hub 名称以避免热点批处理操作减少存储操作次数缓存策略对频繁访问的数据实施缓存执行优化并行执行合理使用Task.WhenAll并行调用活动函数超时配置为长时间运行的操作设置适当的超时重试策略配置智能重试逻辑处理暂时性故障 故障排除指南常见问题与解决方案问题1编排器函数卡在Running状态原因活动函数失败或超时解决方案检查活动函数日志确保正确处理异常问题2存储账户连接失败原因连接字符串错误或网络问题解决方案验证连接字符串检查网络配置问题3编排历史记录过大原因长时间运行的编排产生大量历史记录解决方案使用IDurableOrchestrationContext.ContinueAsNew()重置历史调试工具Durable Functions 分析器安装Microsoft.Azure.WebJobs.Extensions.DurableTask.Analyzers包存储资源管理器直接查看 Azure 存储中的编排状态Kusto 查询在 Application Insights 中使用 Kusto 查询分析日志 实际应用场景电子商务订单处理使用 Durable Functions 实现完整的订单处理流程接收订单 → 2. 库存检查 → 3. 支付处理 → 4. 物流安排 → 5. 通知客户数据 ETL 管道构建可靠的数据处理管道数据提取 → 2. 数据清洗 → 3. 数据转换 → 4. 数据加载 → 5. 质量检查批处理作业调度管理复杂的批处理作业作业拆分 → 2. 并行处理 → 3. 结果聚合 → 4. 错误处理 → 5. 报告生成 学习资源与进阶官方文档Durable Functions 概述编排模式实体函数示例代码项目中的samples/目录包含了丰富的示例代码涵盖了各种使用场景samples/precompiled/- 预编译的 C# 示例samples/distributed-tracing/- 分布式跟踪示例samples/entitites-csharp/- 实体函数示例社区资源GitHub Issues报告问题和功能请求Stack Overflow获取社区帮助Azure Functions 官方文档最新更新和最佳实践 总结Azure Functions Durable Extension 为无服务器计算带来了状态管理和复杂工作流编排的能力。通过本指南您已经掌握了从环境配置、本地开发到生产部署的完整流程。记住以下关键要点设计先行合理规划编排模式和函数结构测试充分在本地环境中充分测试各种场景监控到位配置完整的监控和告警机制安全第一遵循安全最佳实践保护您的应用持续优化根据实际运行情况不断调整和优化现在您可以开始构建可靠、可扩展的云原生应用程序了提示在实际项目中建议从小规模开始逐步增加复杂性并定期回顾架构设计以确保满足业务需求。【免费下载链接】azure-functions-durable-extensionDurable Task Framework extension for Azure Functions项目地址: https://gitcode.com/gh_mirrors/az/azure-functions-durable-extension创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考