Azure Spring Boot Function 如何获取当前重试次数
Azure Function 获取当前重试次数解决方案
你配置的@FixedDelayRetry(maxRetryCount = 3, delayInterval = "00:00:05")规则下,ExecutionContext 本身没有内置公开的获取当前重试次数的属性,你可以通过以下两种方案实现重试耗尽后转存消息到失败队列的需求:
方案一:绑定 RetryContext 元数据(推荐)
目前 Azure Function 针对队列、Service Bus 等支持元数据绑定的触发器,已经开放了RetryContext的绑定入口,Java 语言栈可以直接通过@BindingName注解绑定该对象,直接读取重试次数:
// 函数方法示例 @FunctionName("myQueueHandler") public void processQueueMsg( @QueueTrigger(name = "msg", queueName = "work-queue", connection = "StorageConn") String msgContent, @BindingName("RetryContext") RetryContext retryContext, final ExecutionContext context ) { // 获取当前重试次数:首次执行返回0,第一次重试返回1,以此类推 int currentRetryCount = retryContext.getRetryCount(); // 你配置的最大重试次数是3,当currentRetryCount等于3时,说明所有重试已耗尽 if (currentRetryCount == 3) { // 此处编写将消息拷贝至失败队列的逻辑 } }
方案二:手动跟踪重试次数
如果你使用的触发器暂不支持RetryContext绑定,可以通过请求唯一标识InvocationId配合线程安全的Map手动统计重试次数:
- 同一个请求的所有重试共享同一个
InvocationId,你可以用ConcurrentHashMap存储每个InvocationId对应的累计重试次数 - 每次函数执行时从
ExecutionContext中拿到InvocationId,读取对应计数并累加即可
内容的提问来源于stack exchange,提问作者Tarun Aghara
相关产品推荐
相关产品推荐

