1

我的 Python Azure 函数配置文件 ( function.json) 定义了一个 Blob 存储触发器。

当 Azure Function 唤醒时(即 Live Metrics 中显示的服务器在休眠一段时间后变为联机状态),它会处理所有现有的 blob,而不管哪些 blob 已经生成了触发事件。

我注意到该azure-webjobs-hosts/blobreceipts文件夹​​中填充了sandboxhost637nnn文件夹。每个 Azure Function 唤醒事件都会创建一个新的sandboxhost文件夹。这样,函数就会忘记以前处理的 blob(没有找到旧的收据)。在过去(2019 年 12 月),我记得包含所有收据的唯一webjobs-hosts文件夹在调用中持续存在。

4

2 回答 2

0

要解释为什么会发生这种情况:

无论您的环境如何,根据设计,blob 触发器通过在 azure-webjobs-hosts 容器中维护 blob 收据来跟踪新的和更新的 blob。这些收据**eTags****host ID**您的 Functions 运行时相关。

当您的函数唤醒时,它会导致**host ID and the eTag->host ID correlations**您之前所做的更改将不再适用,这将导致新主机重新处理您现有的所有 blob - 您观察到的行为。

建议改为使用事件网格触发器,或者为您的函数应用使用 Azure 应用服务基本计划,这将更昂贵。

附加参考:

https://github.com/Azure/azure-webjobs-sdk/issues/1327

希望能帮助到你。

于 2020-01-21T10:45:25.357 回答
0

我不确定你发生了什么事。但是现在应该不会再出现这个问题了。

这是一个老问题。并且sdk有更新。

BlobTriggers 现在只会被处理一次,看看这个:

https://azure.microsoft.com/zh-cn/blog/announcing-the-0-5-0-beta-preview-of-microsoft-azure-webjobs-sdk/

可能是您的问题是一个新问题。但是您需要提供您使用的日志和 SDK。然后我们可以帮助您解决这个问题。如果您稍后更新,请告诉我。

于 2020-01-22T06:12:50.670 回答