Azure WebJob不处理所有Blob

时间:2015-01-07 06:38:26

标签: azure azure-webjobs azure-webjobssdk

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

我的问题是它不会处理所有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);            
        }
    }

2 个答案:

答案 0 :(得分:4)

根据Victor上面的评论,看起来这是微软的一个错误。

编辑:我没有得到downvote。有一个问题,微软将解决它。这就是为什么我的一些blob被忽略的答案......

“关于某些存储日志事件被忽略存在一个已知问题。这些事件通常是针对大型文件生成的。我们已经修复了它但尚未公开。很抱歉给您带来不便。 - Victor Hurdugaci Jan 9 at 12点23"

答案 1 :(得分:0)

就像解决方法一样,如果你不直接听Blob而不是在其间插入Queue,当你写入输入Blob容器时也会在队列中写一条关于新Blob的消息,该怎么办呢?让WebJob监听此队列,一旦消息到达队列,WebJob函数就会从输入Blob容器读取文件并复制到输出Blob容器中。 这个模型适合你吗?