Azure函数队列触发器:如何设置出队消息的时间延迟

Ole*_* Sh 6 azure azure-storage azure-queues azure-functions

我有一个 Azure 函数,它监听 azure 队列,例如,出现错误。它再次将消息重新添加到队列中。但 5 次后消息将被移至有害队列。

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

Jer*_*Liu 7

@4c74356b41指出了正确的方法。队列的host.json设置就是您要查找的内容

visibilityTimeout 是消息处理失败时重试之间的时间间隔 maxDequeueCount 是在将消息移动到有害队列之前尝试处理消息的次数。

{
    "version": "2.0",
    "extensions": {
        "queues": {
            "visibilityTimeout" : "01:00:00",
            "maxDequeueCount": 2
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你的函数是v1,同样

{
    "queues": {
      "visibilityTimeout" : "01:00:00",
      "maxDequeueCount": 2
    }
}
Run Code Online (Sandbox Code Playgroud)

更新

由于问题主要是visibilityTimeout根据具体情况进行改变,因此设置相应的延迟CloudQueue.AddMessageAsync是唯一的方法。实际上,它visibilityTimeout做了完全相同的事情,但是在功能应用程序级别(所有队列)上,所以在这种情况下我们不需要坚持它。

  • @OlegSh你的意思是在每种情况下出队的延迟是不同的?如果是这样我们可能不得不依赖你自己的实现代码,配置是在整个功能应用程序级别的,不能动态更改。 (2认同)
  • @OlegSh 嗯...我认为根据情况设置`CloudQueue.AddMessageAsync`的延迟是唯一的方法。实际上,“visibilityTimeout”执行完全相同的操作,但在功能应用程序级别(所有队列)上,因此在这种情况下我们不需要坚持它。 (2认同)