【发布时间】:2015-01-07 06:38:26
【问题描述】:
我将压缩后的文件上传到 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 代替 CloudBlockBlobs 进行输入和输出。
- 关闭输入、输出和 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);
}
}
【问题讨论】:
-
(1) 您是否在仪表板中看到任何失败的调用? (2) 上传 blob 后您是否等待了一段时间?最多可能需要 10 分钟才能拾取 blob
-
(1) 我没有看到任何失败的调用,只有 10 个成功的调用。 (2) 我等了一个多小时。这些文件相当大(30 - 40 兆),处理可能需要 8 秒。这会是个问题吗?
-
如果我重新启动 WebJob,它会拾取它错过的文件。
-
您使用的是什么版本的 SDK?
-
1.0.0 使用 Nuget 安装
标签: azure azure-webjobs azure-webjobssdk