Azure功能和存储队列,如果功能失败该怎么办

时间:2016-10-12 19:00:03

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

我正在制定一个向Azure存储队列发布消息的方案。出于测试目的,我开发了一个控制台应用程序,在那里我收到消息,我可以通过尝试计数更新它,当逻辑完成后,我删除了消息。

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

我发现很难找到关于这个特定主题的任何文档,我觉得我对于将这两者结合起来的概念缺少了一些东西。

我的问题:

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

1 个答案:

答案 0 :(得分:24)

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

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