触发Azure队列存储而不删除消息

Jea*_*ond 1 c# azure azure-functions

在决定删除消息之前,如何在“功能应用程序”中保留消息?

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

queue.DeleteMessage(msg);
Run Code Online (Sandbox Code Playgroud)

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

问题是,就像Azure所说的那样:

  1. 返回到Storage Explorer中,单击“刷新”并确认消息已被处理并且不再在队列中。

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

我试图Throw new Exception("failed");模拟一个失败的函数,但是无论如何都删除了该消息。

我希望将此消息保留在队列中,直到我决定删除它为止(在函数末尾)。

evi*_*obu 5

我试图Throw new Exception("failed");模拟一个失败的函数,但是无论如何都删除了该消息。

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

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

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

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

看到更多信息:https :
//github.com/Microsoft/azure-docs/blob/master/articles/app-service-web/websites-dotnet-webjobs-sdk-storage-queues-how-to.md#automatic毒消息处理