16

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

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

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

我的问题:

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

1 回答 1

31

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

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

于 2016-10-13T03:14:57.407 回答