【问题标题】:Azure Function Queue trigger: how to set time delay for dequeue messageAzure 函数队列触发器:如何设置出列消息的时间延迟
【发布时间】:2019-06-20 19:34:18
【问题描述】:

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

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

【问题讨论】:

标签: azure azure-storage azure-functions azure-queues


【解决方案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 做的事情完全一样,只是在函数应用级别(所有队列),所以在这种情况下我们不需要坚持。

【讨论】:

  • 但它为所有查询设置了一个值,我想为每个案例设置不同的值
  • @OlegSh 您的意思是在每种情况下,出队的延迟都不同?如果是这样我们可能不得不依赖你自己的实现代码,配置是整个函数应用级别的,无法动态更改。
  • 是的,我在每种情况下都需要不同的延迟(即在内部服务器不可用的地方,我想在 1 小时内重试,但在本地数据库未更新时,在 5 小时内分钟)
  • @OlegSh 嗯...我认为根据情况设置CloudQueue.AddMessageAsync的延迟是唯一的方法。实际上 visibilityTimeout 做的事情完全一样,只是在函数应用级别(所有队列),所以在这种情况下我们不需要坚持。
猜你喜欢
  • 2014-06-10
  • 2023-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-06
相关资源
最近更新 更多