首页 文章

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

提问于
浏览
8

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

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

我发现很难找到关于这个特定主题的任何文档,我觉得我错过了关于将这两者结合起来的概念 .

我的问题:

  • 我是对的,当你在新的队列项上触发一个函数时,该函数接收消息并将其从队列中删除,即使该函数失败了?

  • 如果1是正确的,那么如何确保重试该消息并将其发布到死队列以供以后处理?

1 回答

  • 22

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

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

相关问题