我有一个 Azure 函数,它可以侦听 azure 队列,例如,有些错误。它会再次将消息重新添加到队列中。但是5次后消息将被移动到中毒队列。
我想将消息重新添加到队列中,但有延迟。例如,重试到 1 小时。因为我的 Azure 函数使用外部资源,而外部资源目前可能不可用。我根本不想在 10 秒内重试 5 次,我想在 1 小时后重试。当然,我编写了自己的实现,但可能这个功能已经存在。
@4c74356b41指出了正确的方法。队列的 host.json 设置就是您要查找的。
可见性超时是消息处理失败时重试之间的时间间隔 maxDequeueCount 是在将消息移动到病毒队列之前尝试处理消息的次数。
{
"version": "2.0",
"extensions": {
"queues": {
"visibilityTimeout" : "01:00:00",
"maxDequeueCount": 2
}
}
}
如果您的函数是 v1,则类似
{
"queues": {
"visibilityTimeout" : "01:00:00",
"maxDequeueCount": 2
}
}
更新
由于问题主要是根据具体情况改变visibilityTimeout
,因此相应地设置CloudQueue.AddMessageAsync
的延迟是唯一的方法。实际上,visibilityTimeout
执行完全相同的操作,但在函数应用级别(所有队列)上,因此在这种情况下我们不需要坚持这样做。