2

我刚刚将几十 GB 的文件上传到 Azure CloudStorage。每个文件都应该被 FunctionApp 拾取和处理,以响应BlobTrigger

[FunctionName(nameof(ImportDataFile))]
public async Task ImportDataFile(
    // Raw JSON Text file containing data updates in expected schema
    [BlobTrigger("%AzureStorage:DataFileBlobContainer%/{fileName}", Connection = "AzureStorage:ConnectionString")]
    Stream blobStream,
    string fileName)
{
    //...
}

这通常有效,但愚蠢的是,在将所有文件上传到我们的 UAT 系统之前,我没有对该函数进行最终测试......并且上传有问题:(

上传花费了几天时间(由于 CoViD-19,通过我的国内互联网上行链路运行)所以我真的不想重新这样做。

有没有办法“重播” BlobUpload 触发器?这样该功能就会再次触发,就好像我刚刚重新上传了文件一样……无需再次传输任何数据!

4

4 回答 4

6

按照这个link

Azure Functions 将 blob 收据 azure-webjobs-hosts存储在函数应用的 Azure 存储帐户中命名的容器中(由应用设置定义AzureWebJobsStorage)。

若要强制重新处理 blob,请手动从 azure-webjobs-hosts 容器中删除该 blob 的 blob 收据。虽然重新处理可能不会立即发生,但可以保证在以后的某个时间点发生。若要立即重新处理,可以更新 azure-webjobs-hosts/blobscaninfo 中的 scaninfo blob。将再次扫描最新扫描属性之后具有最后修改时间戳的任何 blob

于 2020-06-08T12:49:21.453 回答
2

我发现了一个 hacky-AF 解决方法,它重新处理现有文件:

如果将元数据添加到 blob,则似乎会重新触发 BlobStorage 函数触发器。

在 Azure 存储资源管理器中访问,但右键单击 Blob > 属性 > 添加元数据。

我是设置键:“ForceRefresh”,值“测试”。

于 2020-06-12T11:45:02.970 回答
1

我在代码中处理 blob 时遇到问题,这意味着webjobs-blobtrigger-poison队列中有一堆消息。我不得不将它们移回天蓝色- webjobs-blobtrigger-name-of-function-app。如果没有上述步骤,删除 blob 收据和调整scaninfoblob 不起作用。

幸运的是,Azure 存储资源管理器有一个菜单选项可以将消息从一个队列移动到另一个队列:

在此处输入图像描述

于 2021-05-27T22:20:51.773 回答
0

我找到了一种解决方法,如果您没有对文件名进行投资:

Azure 存储资源管理器在顶部栏中有一个“使用新名称克隆”按钮,它将添加一个新文件(并触发函数),而无需通过本地计算机传输数据。

请注意,“复制”后跟“粘贴”也会重新触发 blob,但似乎会将数据传输到您的计算机,然后再次备份......非常慢!

于 2020-06-12T11:57:02.190 回答