首页 > 解决方案 > Azure 函数队列触发器 - 如果我们失败了如何将项目放回队列中?

问题描述

我正在使用带有队列触发器的 Azure Functions。

当函数运行时,它会从 Azure 队列中取出一个项目。但是,有时我的处理会失败,在这种情况下,我想重新排队该项目并稍后处理它。

如何在 Azure Functions 中使用 Node.js 实现这一目标?

标签: azure-functions

解决方案


我所做的解决方法是创建一个绑定到触发该函数的同一队列。

 [FunctionName("FunctionsQueueTrigger")]
    public static async Task Run(
        [QueueTrigger("101functionsqueue")] string myQueueItem,
        [Queue("101functionsqueue")]  IAsyncCollector<string> myQueue)

就我而言,如果使用代码 412(前提条件失败)引发存储异常,我想将项目放回队列。

catch (StorageException ex)
        {
            if (ex.RequestInformation.HttpStatusCode == (int)System.Net.HttpStatusCode.PreconditionFailed) //412
            {
                log.LogWarning($"Putting item back to queue due to {ex.Message} error.");
                await myQueue.AddAsync(myQueueItem);
            }
        }

最后,该函数从队列中删除当前项目,但添加了一个具有相同内容的新项目。

这可能不是最好的解决方案,但对我来说效果很好。


推荐阅读