azure-functions - Azure 函数队列触发器 - 如果我们失败了如何将项目放回队列中?
问题描述
我正在使用带有队列触发器的 Azure Functions。
当函数运行时,它会从 Azure 队列中取出一个项目。但是,有时我的处理会失败,在这种情况下,我想重新排队该项目并稍后处理它。
如何在 Azure Functions 中使用 Node.js 实现这一目标?
解决方案
我所做的解决方法是创建一个绑定到触发该函数的同一队列。
[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);
}
}
最后,该函数从队列中删除当前项目,但添加了一个具有相同内容的新项目。
这可能不是最好的解决方案,但对我来说效果很好。
推荐阅读
- elisp - 该函数仅假设交换等于 z 的值时用 y 替换整个列表
- database - 如何组织 DynamoDB 表以使用用户和项目?
- graphql - Cypress graphql apollo 调用没有结果并自动重试
- javascript - 不影响innerHTML中的过渡
- mysql - Spring-boot Web 项目无法插入/保存/更新 Wildfly 容器的数据库查询,但适用于 Tomcat 容器
- java - 生产中的应用程序崩溃 - java.lang.NullPointerException
- java - 如何通过 android 中的回收器视图运行 for 循环?
- python - 创建一个 pyTorch 测试数据集(无标签)
- gcc - 有没有办法为多种架构构建 RISC-V GNU 工具?
- go - go get 命令和 go mod 下载命令有什么区别