Azure服务总线重试选项不起作用(v.2.0)



我在Azure Function中使用Microsoft.Azure.WebJobs.Extensions.ServiceBus包的5.2.0版本。根据这里的文档,新版本支持失败操作的自动重试。这是我的主机.json:

{
"version": "2.0",
"extensions": {
"serviceBus": {
"clientRetryOptions": {
"mode": "Exponential",
"tryTimeout": "00:02:00",
"delay": "00:00:02.00",
"maxDelay": "00:30:00",
"maxRetries": 10
}
}
}
}

除了时间值之外,它与文档中的完全相同。在由ServiceBusTrigger触发的Function中,我在某些情况下抛出异常。我希望消息延迟,如文档中所述。但它会被放回队列的最前面,并立即重试,没有延迟。我花了2个工作日的时间在这方面,我在网上找到了各种版本、错误的文档和示例,我尝试了各种排列,但我就是无法做到这一点。

我再也看不见树林了。有人看到我做错了什么吗?

您正在配置的选项控制Function绑定所使用的服务总线客户端的隐式重试行为。当读取或发布消息由于被认为是暂时性的错误而失败时,这些设置将应用于客户端重试。此流对于您的函数来说是不可见的,除了通过读取/发布完成所需的时间比正常情况下更长之外。

函数代码中的异常不受这些设置的管辖。这些类型的异常由函数错误处理和重试配置控制。

这个问题似乎是在这里提出并回答的。似乎重试只适用于它认为可重试的某些错误,即瞬态错误。

如其他答案中所述,这些重试选项仅适用于内部(瞬态(异常。您需要的可以通过新的重试策略实现(预览(:

[FunctionName("EventHubTrigger")]
[ExponentialBackoffRetry(5, "00:00:04", "00:15:00")]
public static async Task Run([EventHubTrigger("myHub", Connection = "EventHubConnection")] EventData[] events, ILogger log)
{
// ...
}

或者,特别是对于ServiceBus,您可以通过禁用自动完成并利用队列上的锁定持续时间属性来实现类似的行为。重试次数可以通过使用最大传递计数来控制。

编辑:对于ServiceBus,这些重试将很快被删除

最新更新