Azure Function和存储队列,function失效怎么办

Azure Function and storage queue, what to do if function fails

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

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

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

我的问题:

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

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

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