【问题标题】:Azure Queue Storage triggered without removing messageAzure 队列存储在不删除消息的情况下触发
【发布时间】:2017-05-24 15:11:15
【问题描述】:

我如何才能在“功能应用”中保留一条消息,直到我决定删除它?

当我在 c# 中构建控制台应用程序时,我可以决定何时删除我阅读时使用的消息:

queue.DeleteMessage(msg);

我可以通过这个过程自动读取队列:functions-create-storage-queue-triggered-function。

问题是,就像 Azure 所说的:

  1. 返回存储资源管理器,单击刷新并确认消息已被处理并且不再在队列中。

在这种情况下,我无法在功能完成后自行删除消息。

我尝试Throw new Exception("failed"); 来模拟失败的功能,但消息还是被删除了。

我希望将此消息保留在队列中,直到我决定将其删除(在函数结束时)。

【问题讨论】:

    标签: c# azure azure-functions


    【解决方案1】:

    我尝试Throw new Exception("failed"); 来模拟一个失败的功能,但消息还是被删除了。

    该消息不会被删除,无论visibility-timeout 在几秒钟内是什么,它都会变得不可见。您在 WebJobs SDK 的上下文中运行您的代码,这就是您不能自己调用​​ .DeleteMessage() 的原因。您只收到消息,而不是队列客户端。

    如果您的 Function 成功完成,则该消息将由 Functions 运行时 (WebJobs SDK) 删除。

    参考:
    https://stackoverflow.com/a/40011705/4148708
    https://github.com/Azure/azure-webjobs-sdk/issues/1040

    编辑: 出队计数也可以咬。如果消息 dequeueCount 属性达到 5,WebJobs SDK 会将消息移动到中毒队列 (QueueName-poison)。

    查看更多信息:
    https://github.com/Microsoft/azure-docs/blob/master/articles/app-service-web/websites-dotnet-webjobs-sdk-storage-queues-how-to.md#automatic-poison-message-handling

    【讨论】:

    • 没错,我尝试了一条成功消息和 1 与“throw”,成功消息工作并消失,但失败消息在 myqueue-poison 中。但是NextVisibleTime="Null"
    • 表示已经出队5次,如果dequeueCount属性达到5,SDK会将其移动到毒队列中。我认为是5,不要引用我,检查文档。
    • 是的,是 5。你可以引用我的话 :) --github.com/Microsoft/azure-docs/blob/master/articles/…
    猜你喜欢
    • 2014-01-28
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 2019-11-08
    相关资源
    最近更新 更多