如何将消息保留在“功能应用程序”中,直到我决定将其删除?
当我用 C# 构建控制台应用程序时,我可以决定何时删除我阅读的消息:
queue.DeleteMessage(msg);
我可以通过以下过程自动读取队列:函数创建存储队列触发函数 https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-storage-queue-triggered-function.
问题是,正如 Azure 所说:
- 返回存储资源管理器,单击刷新并验证消息是否已被处理并且不再位于队列中。
在这种情况下,当函数完成时,我无法自己删除消息。
我尝试过了Throw new Exception("failed");
模拟失败的功能,但消息无论如何都会被删除。
我希望将此消息保留在队列中,直到我决定删除它(在函数末尾)。
我尝试过了Throw new Exception("failed");
模拟失败的功能,但消息无论如何都会被删除。
该消息不会被删除,无论发生什么,它都会变得不可见visibility-timeout
以秒为单位。您正在 WebJobs SDK 的上下文中运行代码,这就是您无法调用的原因.DeleteMessage()
靠你自己。您只会收到消息,而不是队列客户端。
如果您的函数成功完成,则该消息将被函数运行时 (WebJobs SDK) 删除。
Ref:
https://stackoverflow.com/a/40011705/4148708 https://stackoverflow.com/a/40011705/4148708
https://github.com/Azure/azure-webjobs-sdk/issues/1040 https://github.com/Azure/azure-webjobs-sdk/issues/1040
编辑:
出队计数也很困难。 WebJobs SDK 会将消息移至有害队列(QueueName-poison
)如果消息dequeueCount
属性达到5。
请参阅此了解更多信息:
https://github.com/Microsoft/azure-docs/blob/master/articles/app-service-web/websites-dotnet-webjobs-sdk-storage-queues-how-to.md#automatic-poison-message-处理 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)