代码之家  ›  专栏  ›  技术社区  ›  Oleg Sh

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

  •  0
  • Oleg Sh  · 技术社区  · 5 年前

    我有一个Azure函数,它监听Azure队列,例如,一些错误。它再次将消息添加到队列中。但5次之后,消息将被移动到中毒队列。

    我想延迟地将消息重新添加到队列中。例如,重试1小时。因为我的Azure函数与外部资源一起工作,而外部资源现在可能不可用。我不想在10秒内重试5次,我想在1小时后重试。当然,我自己编写了它的实现,但可能这个特性已经存在。

    1 回复  |  直到 5 年前
        1
  •  0
  •   Jerry Liu Phantom    5 年前

    @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 因此,这是唯一的办法。事实上 可见性超时 做完全相同的事情,但在功能应用程序级别(所有队列),所以在这种情况下,我们不需要坚持它。