如何识别Azure EventHub触发函数的执行是否为重试?
判断Azure Event Hub触发函数的重试执行状态
原代码示例
[FunctionName("Function1")] [ExponentialBackoffRetry(-1, "00:00:03", "00:00:30")] public static async Task Run([EventHubTrigger("test", Connection = "EventHubConnection", ConsumerGroup = "eventprocessor")] EventData[] events, ILogger log) { }
问题说明
上述代码通过[ExponentialBackoffRetry]配置了指数退避重试策略,当出现未处理异常时,Event Hub Trigger触发的Azure函数会执行重试。如何判断当前函数执行是重试执行,还是正常的下一批次执行?
解决方案
通过
ExecutionContext获取重试标识
在函数参数中注入ExecutionContext对象,它的RetryContext.RetryCount属性可以直接区分执行类型:初始执行时该值为0,重试执行时会大于0(第一次重试为1,第二次为2,以此类推)。修改后的函数示例:
[FunctionName("Function1")] [ExponentialBackoffRetry(-1, "00:00:03", "00:00:30")] public static async Task Run([EventHubTrigger("test", Connection = "EventHubConnection", ConsumerGroup = "eventprocessor")] EventData[] events, ILogger log, ExecutionContext executionContext) { int retryCount = executionContext.RetryContext?.RetryCount ?? 0; if (retryCount > 0) { log.LogInformation($"当前为第{retryCount}次重试执行,调用ID: {executionContext.InvocationId}"); } else { log.LogInformation($"当前为首次执行,调用ID: {executionContext.InvocationId}"); } // 你的业务逻辑代码 }利用结构化日志识别
Azure Functions会自动为重试执行的日志添加RetryCount和RetryReason属性,你可以通过ILogger输出结构化日志,直接在日志中查看执行类型:log.LogInformation("函数执行状态 | 重试次数: {RetryCount}, 调用ID: {InvocationId}", executionContext.RetryContext?.RetryCount ?? 0, executionContext.InvocationId);
内容的提问来源于stack exchange,提问作者191180rk
相关产品推荐
相关产品推荐

