如何在"功能App"中保留一条消息。直到我决定删除它?
当我在c#中构建一个控制台应用程序时,我可以决定何时删除我读过的消息:
queue.DeleteMessage(msg);
我可以使用此程序自动读取队列:functions-create-storage-queue-triggered-function。
问题是,像Azure说:
- 返回Storage Explorer,单击“刷新”并验证邮件是否已处理且不再在队列中。
醇>
在这种情况下,我无法在功能完成后自行删除该消息。
我尝试Throw new Exception("failed");
来模拟失败的功能,但无论如何都会删除该消息。
我希望将此消息保留在队列中,直到我决定将其删除(在功能结束时)。
答案 0 :(得分: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
属性达到5,WebJobs SDK会将消息移动到毒性队列(dequeueCount
)。