尽管有固定延迟重试,C# Azure 服务总线功能仍被触发多次

问题描述 投票:0回答:1

因此,我有一个 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 分钟来处理消息。我在队列中配置了以下属性:

  1. 最大配送次数 = 2 分钟
  2. 消息生存时间 = 默认(14 天)
  3. 消息锁定持续时间 = 5 分钟

这是我的发现:

  1. 我向服务总线队列发送一条消息,消息被拾取并在函数内部,我抛出一个异常(大约 2 秒)

  2. 该函数等待 2 分钟,2 分钟后,消息被获取并遇到异常

  3. 第二次运行后,没有等待 2 分钟,azure 函数就再次被触发,并且像之前的步骤一样,它遇到了异常。

  4. 完成上述步骤后,函数等待了2分钟,2分钟后,它再次开始最后一次运行,然后遇到异常,然后死信。

现在,我提供了步骤,我想知道为什么步骤 3 没有等待 2 分钟就运行异常以及如何解决这个问题?预先感谢。

c# azure azureservicebus
1个回答
0
投票

根据文档,您不应指望此功能继续发展,而应依赖交付计数。

此功能全面可用 (GA) 后,我们将在运行时中删除对计时器、Kafka 和事件中心以外的触发器的重试策略支持。对计时器和事件中心之外的所有触发器的预览重试策略支持已于 2022 年 12 月删除。有关更多信息,请参阅重试部分。

如果您希望自己实现延迟重试,您可以使用您似乎正在使用的In-Process SDK。使用Isolated Worker SDK,除非实现消息结算功能(相当于

MessageActions
),否则这是不可能的。

© www.soinside.com 2019 - 2024. All rights reserved.