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