【问题标题】:Azure Function and storage queue, what to do if function failsAzure函数和存储队列,如果函数失败怎么办
【发布时间】:2017-02-21 17:08:25
【问题描述】:

我正在研究一个将消息发布到 Azure 存储队列的方案。出于测试目的,我开发了一个控制台应用程序,我可以在其中获取消息,并且可以使用尝试计数对其进行更新,当逻辑完成后,我会删除该消息。

现在我正在尝试将我的代码移植到 Azure 函数。一件似乎非常不同的事情是,当调用 Azure 函数时,消息会从队列中删除。

我发现很难找到关于这个特定主题的任何文档,而且我觉得我在结合这两者的概念方面遗漏了一些东西。

我的问题:

  1. 我说得对吗,当您在新队列项上触发函数时,即使函数失败,该函数也会获取消息并将其从队列中删除?
  2. 如果 1 是正确的,如何确保消息被重试并发布到死队列以供以后处理?

【问题讨论】:

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


    【解决方案1】:

    运行时仅在您的函数成功处理队列消息时删除它(即没有发生错误)。当消息出列并传递给您的函数时,它会在一段时间(10 分钟)内不可见。当你的函数运行时,这种不可见性会被保持。如果您的函数失败,则消息未删除 - 它以不可见状态保留在队列中。可见性超时后,消息将在队列中再次可见以进行重新处理。

    有关核心 WebJobs SDK 队列处理工作原理的详细信息,请参阅here。在该页面上,请参阅解决您的问题的“如何处理有害消息”部分。基本上,您将免费获得所有正确的行为 - 重试处理、有害消息处理等 :)

    【讨论】:

    • 非常感谢。我很困惑,因为运行控制台我读到该消息在 60 秒内不可见。我可以在使用 Azure 函数时更改那个不可见的时间吗?
    • 目前无法自定义,尽管我们在我们的 repo 中跟踪可自定义 here 时遇到问题。如果您需要这种能力,请随时加入该问题。但是,对于大多数情况,10 分钟的值就可以了。如果以上回答了您的问题,请标记为已回答,谢谢:)
    • 如果它在失败时立即再次可见就好了。这在路线图上吗?
    • 我们的 repo here 中有一个未解决的问题,正在跟踪它。随意加入你的场景。
    • 不幸的是,在提供的链接和包含它的 wiki 中似乎都找不到“如何处理有害消息”。
    猜你喜欢
    • 2019-08-17
    • 2021-10-03
    • 2011-03-11
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 2011-04-26
    • 1970-01-01
    相关资源
    最近更新 更多