我将 gzip 压缩文件上传到 Azure 存储容器(输入)。然后我有一个 WebJob 应该拾取 Blob,解压缩它们并将它们放入另一个容器(输出)中。两个容器使用相同的存储帐户。
我的问题是它不能处理所有 Blob。它似乎总是错过 1。今天早上,我将 11 个 blob 上传到输入容器,但只处理了 10 个并将其转储到输出容器中。如果我上传 4 个,那么将处理 3 个。尽管已上传 11 个 Blob,仪表板仍将显示 10 次调用。看起来它不会被第 11 个 Blob 触发。如果我只上传 1 个,它似乎会处理它。
我正在标准模式下运行网站,并将“Always On”设置为 true。
我已经尝试过:
- 编写类似 Azure 示例 ( https://github.com/Azure/azure-webjobs-sdk-samples ) 的代码。
- 编写类似于本文中的代码 ( http://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-get-started ) 的代码。
- 使用 Streams 代替 CloudBlockBlob 进行输入和输出。
- 关闭输入、输出和 Gzip 流的各种组合。
- 在 Unzip 方法中包含 UnzipData 代码。
这是我最新的代码。我做错了什么吗?
public class Functions
{
public static void Unzip(
[BlobTrigger("input/{name}.gz")] CloudBlockBlob inputBlob,
[Blob("output/{name}")] CloudBlockBlob outputBlob)
{
using (Stream input = inputBlob.OpenRead())
{
using (Stream output = outputBlob.OpenWrite())
{
UnzipData(input, output);
}
}
}
public static void UnzipData(Stream input, Stream output)
{
GZipStream gzippedStream = null;
gzippedStream = new GZipStream(input, CompressionMode.Decompress);
gzippedStream.CopyTo(output);
}
}
最佳答案
根据 Victor 上面的评论,这看起来像是 Microsoft 端的一个错误。
编辑:我没有得到反对票。存在问题,微软将修复它。这就是为什么我的一些 Blob 被忽略的答案......
“存在一个关于某些存储日志事件被忽略的已知问题。这些事件通常是为大文件生成的。我们已对此进行了修复,但尚未公开。对于给您带来的不便,我们深表歉意。 – Victor Hurdugaci 1 月 9 日,地址12:23"
关于Azure WebJob 未处理所有 Blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27813769/