Azure Function 和存储队列,如果函数失败怎么办

标签 azure azure-functions azure-storage-queues

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

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

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

我的问题:

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

最佳答案

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

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

关于Azure Function 和存储队列,如果函数失败怎么办,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40006372/

相关文章:

c# - Azure 队列限制错误,请求很少(StorageException : The server is busy)

azure - 如何使用 Azure 存储队列逻辑应用连接器设置队列消息的过期时间 (TTL)?

azure - 权限_拒绝 : Invalid permissions on the specified KeyVault

Azure 队列主体太大并超过最大允许限制

azure - 在 Azure 中配置主动-被动 Web 应用服务器

azure - 如何通过 Azure Functions (v2) 使用 Azure Key Vault

sql-server - 如何将 SQL LIKE '%value%' 运算符与 Azure Functions SQL 绑定(bind)结合使用?

t-sql - Azure 函数 SendGrid

azure - Azure 队列存储的行为与 MSMQ 相同吗?

c# - 使用 C# 的 Azure 文本分析给出错误