是否可以使用存储队列实现 Azure Function PULL 模式?

问题描述

我目前有一个事件网格触发的 Azure 函数,它会在 blob 上传到特定存储帐户时执行。这不会随着越来越大的 blob 上传而扩展。如果函数确认消息但由于某种原因下游失败,也有可能“丢失”消息。

消息队列将允许进行缓冲,因此函数不会耗尽内存,并允许在确认完成之前存储消息。

我正在寻找一个 PULL 模式的示例,其中函数根据自己的条件处理队列消息。

思考:

  1. 当 Blob 上传到存储帐户时,
  2. 事件网格将消息写入存储队列,
  3. 函数轮询存储队列中未处理的消息,
  4. 相应地处理消息
  5. 成功后,出队的消息
  6. 如果失败,重试消息

类似这样的事情:

enter image description here

这是一种有效的方法还是我只是为函数使用 Queue Storage 触发器并从场景中消除事件网格?

解决方法

事件网格具有 Event Handlers 的概念,其中 Azure Functions 是一种选择。

对于您的用例,您可以简单地将事件转发到 storage queueservice bus queue,以便由从队列中读取的函数应用进行处理。

两个队列提供程序都有自己的重试机制,Azure Functions 已经通过该机制运行。