【问题标题】:If Azure function times out, is the trigger message put back on the Azure queue?如果 Azure 函数超时,是否将触发消息放回 Azure 队列?
【发布时间】:2017-12-30 09:31:48
【问题描述】:

或者该行为仅在函数出错时可用。

这是一个队列触发的函数。

【问题讨论】:

  • 你为什么不试试呢?应该是一个非常简单的场景来生成

标签: azure azure-functions azure-queues


【解决方案1】:

从我的测试来看,是的,如果 azure 函数超时,消息会无限期地返回到队列中。

这是我提交 8 小时后的消息信息:

插入时间 格林威治标准时间 2018 年 7 月 9 日星期一 16:04:33

到期时间 格林威治标准时间 2018 年 7 月 16 日星期一 16:04:33

出队计数 29

此 MSDN 页面 https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-error-pages 说“支持重试的两个触发器是 Azure 队列存储和 Azure Blob 存储。默认情况下,这些触发器最多重试五次。第五次重试后,两个触发器都会向一个特殊的毒药队列。”

在函数超时的情况下,此错误行为不成立;我的消息是 29 次重试和计数!

【讨论】:

    【解决方案2】:

    正如 Mikhail 所说,函数会自动重试处理消息 5 次。如果重试 5 次后失败,它将自动移至中毒队列<queuename>-poison

    以下是两个相关的帖子,对队列消息和处理方式进行了更多说明

    这是handling poison queue messages 的一些文档。

    希望这可以为您澄清事情。

    【讨论】:

      【解决方案3】:

      如果函数完成没有任何错误,该函数会自动将消息标记为已完成,并将其从队列中删除。

      否则,消息将被放回队列中。这将使它再次被处理可见。但是,请记住,每次处理消息时,DeliveryCount 都会递增。如果DeliveryCount 超过队列的MaxDeliveryCount,则消息将移动到死消息子队列。

      【讨论】:

      • 那么,超时是否会被视为错误情况?我猜有一个协调器进程可以检查函数的状态。这个过程是否依赖函数来告诉自己的状态?
      • 我相信该属性称为dequeueCount,最大值固定为5,消息移动到<queeuename>-poison队列
      猜你喜欢
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      • 2022-11-04
      相关资源
      最近更新 更多