新的 Azure Function App 处理已由另一个 Function App 处理过的 Blob

问题描述 投票:0回答:1

我有以下情况。我有一个在 Windows 应用服务计划上运行的功能。该函数处理 blob。该函数具有默认的

LogsAndContainerScan
触发器。现在,经过一段时间后,我决定重写这个函数,并将其从 Windows 迁移到 Linux,我还想将其部署在 docker 容器内的隔离环境中。为了实现这一目标,我创建了另一个在新的 Linux 应用服务计划上运行的函数应用程序。在部署过程中,我在 Linux 上部署并启动了一个新的函数应用程序,并停止了 Windows 上的旧函数应用程序。

令我大吃一惊的是,新函数开始处理前一个函数很久以前处理过的 blob。经过一些挖掘和阅读 Stack Overflow 上的答案(例如 this onethis one)后,在我看来,只有当 azure-webjobs-hosts blob 容器内没有

blob 收据
时,该函数才会处理 blob。当我查看我的
azure-webjobs-hosts
blob 容器时,我发现其中实际上有两个文件夹 - 一个用于我以前的函数,另一个用于我的新函数。所以我得出的结论是,即使存在现有 blob 的收据,它们也位于旧函数应用程序的文件夹中,这意味着当我创建新函数应用程序时,它试图在另一个文件夹中查找收据,但找不到它们,所以它开始再次处理所有的 blob。这基本上意味着,每当我决定使用 blob 触发器创建另一个函数应用程序时,它都会尝试重新处理所有现有文件。

我的问题。

  1. 我上面的推理是否正确,每个函数应用程序都会再次重新处理之前处理过的 blob?如果不是,为什么会发生在我的情况下?
  2. 有什么方法可以避免将来出现这种情况,例如,当我决定创建另一个将在同一个 blob 容器上运行的函数应用程序时?
azure azure-functions azure-blob-storage azure-blob-trigger
1个回答
0
投票

我对默认触发器了解不够,无法评论#1

回答#2 我会考虑使用事件网格事件。这样就不会进行轮询,并且仅在创建 blob 时才会接收事件。因此,针对现有存储容器设置新函数意味着仅调用随后添加的新 blob。 请注意,事件网格保证“至少一次交付”(由于瞬态故障的可能性),因此您确实需要考虑到这一点。参考 https://learn.microsoft.com/en-us/azure/azure-functions/storage-considerations?tabs=azure-cli#trigger-on-a-blob-container

© www.soinside.com 2019 - 2024. All rights reserved.