如何在Azure Durable Function v4(独立版)活动中获取重试次数?
在Azure Durable Functions v4(独立版)活动中获取重试次数
可行性结论
可行,但不能通过FunctionContext.RetryContext获取——该属性仅适用于Azure Functions原生的重试策略,而Durable Functions的重试由编排器层面的Durable Task框架管理,需要使用Durable专属的上下文对象。
实现步骤
- 在活动函数的参数中注入
ActivityExecutionContext(来自Microsoft.DurableTask命名空间) - 通过
ActivityExecutionContext.RetryAttempt属性获取当前重试次数(注意:首次执行时该值为0,第一次重试为1,以此类推)
修改后的活动函数代码
using Microsoft.Azure.Functions.Worker; using Microsoft.DurableTask; using Microsoft.Extensions.Logging; namespace Functions; public class DemoDurableFunction { // 其他函数代码保持不变... [Function(nameof(RunActivity))] public async Task<string> RunActivity( [ActivityTrigger] string name, ActivityExecutionContext activityContext) { // 获取当前重试次数:首次执行是0,每重试一次递增1 int retryCount = activityContext.RetryAttempt; var logger = activityContext.CreateLogger(nameof(RunActivity)); logger.LogInformation("当前活动[{Name}]的重试次数:{RetryCount}", name, retryCount); await Task.Delay(500); if (name.StartsWith("C")) { throw new Exception($"No C-names allowed,当前重试次数:{retryCount}"); } return $"DONE: {name}"; } }
补充说明
- 你配置的
RetryPolicy(maxNumberOfAttempts: 2)表示最多执行2次(首次执行+1次重试),对应RetryAttempt的值会是0和1 - 如果需要保留
FunctionContext,可以同时注入两个参数,二者互不冲突:public async Task<string> RunActivity( [ActivityTrigger] string name, ActivityExecutionContext activityContext, FunctionContext functionContext) { // 按需使用两个上下文 }
内容的提问来源于stack exchange,提问作者Bart Kiers
相关产品推荐
相关产品推荐

