首页 > 解决方案 > Azure 函数队列触发器:如何设置出队消息的时间延迟

问题描述

我有一个 Azure 函数,它监听 azure queue,例如,有问题。它再次将消息重新添加到队列中。但是经过 5 次消息将被移动到毒队列。

我想延迟将消息重新添加到队列中。例如,重试 1 小时。因为我的 Azure Function 使用外部资源,目前可能不可用。我根本不想在 10 秒内重试 5 次,我想在 1 小时后重试。当然,我编写了自己的实现,但可能这个特性已经存在。

标签: azureazure-storageazure-functionsazure-queues

解决方案


@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在功能应用级别(所有队列)上做的事情完全相同,所以在这种情况下我们不需要坚持。


推荐阅读