Azure WebJob 不处理所有 Blob

Azure WebJob not processing all Blobs

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

我的问题是它无法处理所有 Blob。它似乎总是错过 1。今天早上我将 11 个 blob 上传到输入容器,只有 10 个被处理并转储到输出容器中。如果我上传 4 个,那么将处理 3 个。仪表板将显示 10 个调用,即使已上传 11 个 blob。它看起来不像是为第 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);            
        }
    }

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

根据上面 Victor 的评论,它看起来像是 Microsoft 端的错误。

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

"There is a known issue about some Storage log events being ignored. Those events are usually generated for large files. We have a fix for it but it is not public yet. Sorry for the inconvenience. – Victor Hurdugaci Jan 9 at 12:23"