【发布时间】:2019-09-11 03:36:00
【问题描述】:
我有一个TimerTrigger Azure 函数,它每分钟触发一次。
当它触发时,我通过以下代码从队列中读取特定数量的消息:
cloudQueue.GetMessagesAsync(32);
当我完成它时,我看到消息在队列中再次可见,尽管函数没有遇到任何错误。
我看过这些答案,但他们都说如果您的函数在运行时没有错误,则应从队列中删除消息:
Azure Queue Storage triggered without removing message
Azure Function and storage queue, what to do if function fails
但是我的消息没有被删除。
这是我的功能代码:
[FunctionName("MyFunctionName")]
public static async Task SchedulerFunction([TimerTrigger("0 */1 * * * *", RunOnStartup = false)]TimerInfo myTimer, [Queue("my-queue-name", Connection = "AzureWebJobsStorage")]CloudQueue cloudQueue)
{
var messages = await cloudQueue.GetMessagesAsync(32);
await ProcessSomethingOnMessagesWithoutAnyErrors(messages);
}
我需要的是在我通过cloudQueue.GetMessagesAsync(32); 得到它们之后从队列中删除收集的消息,如果它失败了 3 次,然后将它们移动到my-queue-name-poison 队列中。
如果我需要使用任何特定的RetryPolicy,请不要犹豫,推荐它。
【问题讨论】:
-
如果您已经成功处理并在重试 3 次后将消息移至另一个队列,您是否要删除该消息?
-
@JimXu 是的,如果处理成功,我希望将其删除,否则将其移至毒物队列,这是一种常见做法,因为我们不希望某些错误消息留在3 次尝试失败后排队。
-
能否提供您参考的文件?
-
根据我的研究,如果要处理队列中的消息,我们可以使用queuetrigger。更多详情请参考docs.microsoft.com/en-us/azure/azure-functions/…。
-
@JimXu 感谢您的提示,我已经将 QueueTrigger 用于其他目的,但是在我提出问题的这种情况下,我需要每分钟处理一次队列,不少于一分钟。您也可以访问我提供的链接作为参考。