当您无法使确切的排队消息出队时,QueueTriggerAttribute 有什么好处?或者你可以吗?

What good is a QueueTriggerAttribute when you can't dequeue the exact queued message? Or can you?

我想了解一些有关 Azure Functions 的 QueueTriggerAttribute 用于队列存储的信息。我可以看到 QueueTriggerAttribute 允许我将 Azure 函数绑定到队列存储事件,以便在将新项目添加到队列时使用 - 我的函数调用该新消息的内容。

不过,这有什么用?

仍然无法使触发函数中的确切队列存储项目出列,对吧?您可以做的最好的事情就是从队列中弹出下一个可用项目,这可能不是触发函数的项目。

我猜理论上 1 次推送到队列存储会触发 1 次函数调用,您可以在其中进行 1 次弹出调用。所以在一天结束时,您仍然可以利用这些触发器来处理队列中的所有项目 - 只要没有中断或任何会导致触发器未处理的事情,导致项目卡在队列中。

我是不是漏掉了什么?我正在结合 Azure Functions 和 QueueTrigger 查看队列存储。我正在尝试将执行函数的队列驱动工作流概念化,但我觉得这似乎不正确 - 或者我不理解这里的某些内容。

你好像理解错了,但我不确定你的困惑是什么。

当您向队列发送 1 条消息时,侦听该队列的函数将触发,并且该消息的内容将作为输入参数传递给您编写的代码。

您的代码不需要也不应该 "pop" 显式地从队列中获取任何内容 - 这是由 Azure Functions 运行时在幕后完成的。一次调用将只处理那条消息,并会尽快退出。

看这段代码:

[FunctionName("QueueTrigger")]
public static void QueueTrigger(
    [QueueTrigger("myqueue-items")] string myQueueItem, 
    TraceWriter log)
{
    log.Info($"C# function processed: {myQueueItem}");
}

除属性外,没有任何代码适用于队列。它只是被触发,每条消息一次。