因此,我有一个 Azure 函数,如果任何消息进入服务总线上的队列,该函数就会被触发。因此,我有以下设置:
[FunctionName("CallCustomerAPI")]
[FixedDelayRetry(1, "00:02:00")]
public async Task Run(
[ServiceBusTrigger("account_queue", Connection = "SBConnection")] string payload
, int deliveryCount
, ILogger log)
{
//Logic Here
}
正如我们在这里看到的,我添加了 2 分钟的固定延迟重试(FixedDelayRetry)和 1 次重试,这意味着该函数将等待 2 分钟来处理消息。我在队列中配置了以下属性:
这是我的发现:
我向服务总线队列发送一条消息,消息被拾取并在函数内部,我抛出一个异常(大约 2 秒)
该函数等待 2 分钟,2 分钟后,消息被获取并遇到异常
第二次运行后,没有等待 2 分钟,azure 函数就再次被触发,并且像之前的步骤一样,它遇到了异常。
完成上述步骤后,函数等待了2分钟,2分钟后,它再次开始最后一次运行,然后遇到异常,然后死信。
现在,我提供了步骤,我想知道为什么步骤 3 没有等待 2 分钟就运行异常以及如何解决这个问题?预先感谢。
根据文档,您不应指望此功能继续发展,而应依赖交付计数。
此功能全面可用 (GA) 后,我们将在运行时中删除对计时器、Kafka 和事件中心以外的触发器的重试策略支持。对计时器和事件中心之外的所有触发器的预览重试策略支持已于 2022 年 12 月删除。有关更多信息,请参阅重试部分。
如果您希望自己实现延迟重试,您可以使用您似乎正在使用的In-Process SDK。使用Isolated Worker SDK,除非实现消息结算功能(相当于
MessageActions
),否则这是不可能的。