我正在设计一个场景,其中将消息发布到 Azure 存储队列。出于测试目的,我开发了一个控制台应用程序,我可以在其中获取消息,并且可以使用尝试计数来更新它,当逻辑完成时,我删除该消息。
现在我正在尝试将我的代码移植到 Azure 函数。一件似乎非常不同的事情是,当调用 Azure Function 时,消息将从队列中删除。
我发现很难找到关于这个特定主题的任何文档,并且我觉得我缺少一些关于将这两者结合起来的概念的东西。
我的问题:
- 我说得对吗?当您在新队列项上触发函数时,即使函数失败,该函数也会获取消息并将其从队列中删除?
- 如果 1 正确,如何确保重试该消息并将其发布到死队列以供稍后处理?
最佳答案
只有当您的函数成功处理队列消息时(即没有发生错误),运行时才会删除该消息。当消息出队并传递给您的函数时,它会在一段时间内(10 分钟)不可见。当您的函数运行时,这种不可见性会被保持。如果您的函数失败,该消息不会被删除 - 它会以不可见状态保留在队列中。可见超时到期后,消息将再次在队列中可见以进行重新处理。
有关核心 WebJobs SDK 队列处理工作原理的详细信息,请参阅 here 。在该页面上,请参阅解决您的问题的“如何处理有害消息”部分。基本上,您将免费获得所有正确的行为 - 重试处理、有害消息处理等。:)
关于Azure Function 和存储队列,如果函数失败怎么办,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40006372/