首先,我们需要确保我们是最新版本,如果不是,请升级它。
确保在function.json 中添加重试策略,如下所示:
{
"disabled": false,
"bindings": [
{
....
}
],
"retry": {
"strategy": "fixedDelay",
"maxRetryCount": 4,
"delayInterval": "00:00:10"
}
}
同时检查死信并在MS Docs 的帮助下进行配置。
我们需要在host.json中通过在JSON结构中包含参数“maxAutoLockRenewalDuration”:“00:05:00”来提及更新的锁定持续时间
下面是host.json的例子
{
"version": "2.0",
"extensions": {
"serviceBus": {
"clientRetryOptions":{
"mode": "exponential",
"tryTimeout": "00:01:00",
"delay": "00:00:00.80",
"maxDelay": "00:01:00",
"maxRetries": 3
},
"prefetchCount": 0,
"autoCompleteMessages": true,
"maxAutoLockRenewalDuration": "00:05:00",
"maxConcurrentCalls": 16,
"maxConcurrentSessions": 8,
"maxMessages": 1000,
"sessionIdleTimeout": "00:01:00"
}
}
}
从上面的JSON中,将autoCompleteMessages的参数从true改为false为"autoCompleteMessages": false.
当设置为 false 时,您负责调用 MessageReceiver 方法来完成、放弃或死信消息。如果抛出异常(并且没有调用任何 MessageReceiver 方法),则锁定仍然存在。一旦锁过期,消息会重新排队,DeliveryCount 递增,锁会自动更新。
使用 ReceiveandLock 解决了这个case中的问题
参考这些 SO 线程:SO1 和 SO2(感谢回答的作者的详细解释)