2

我将压缩文件上传到 Azure 存储容器(输入)。然后我有一个 WebJob,它应该拾取 Blob,解压缩它们并将它们放入另一个容器(输出)。两个容器使用相同的存储帐户。

我的问题是它不能处理所有 Blob。它似乎总是错过 1。今天早上,我将 11 个 blob 上传到输入容器,只有 10 个被处理并转储到输出容器中。如果我上传 4 则 3 将被处理。即使已上传 11 个 blob,仪表板仍将显示 10 个调用。看起来它不会被第 11 个 blob 触发。如果我只上传 1 它似乎会处理它。

我在标准模式下运行网站,并将 Always On 设置为 true。

我努力了:

这是我最新的代码。难道我做错了什么?

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);            
        }
    }
4

2 回答 2

3

根据上面维克多的评论,它看起来像是微软的一个错误。

编辑:我没有得到反对票。存在问题,Microsoft 将修复它。这就是为什么我的一些 blob 被忽略的答案......

“有一个关于某些存储日志事件被忽略的已知问题。这些事件通常是为大文件生成的。我们有一个修复程序,但它尚未公开。抱歉给您带来不便。- Victor Hurdugaci 1 月 9 日 12:23 "

于 2015-01-12T06:15:46.990 回答
0

作为一种解决方法,如果您不直接收听 Blob 而是在中间带一个队列,当您写入 Input Blob Container 时,还要在队列中写一条关于新 Blob 的消息,让 WebJob 收听这个 Queue,一旦有消息到达 Queue ,WebJob 函数就会从 Input Blob Container 中读取 File 并复制到 Output Blob Container 中。这个模型对你有用吗?

于 2015-01-09T19:34:30.313 回答