我将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);
}
}
答案 0 :(得分:4)
根据Victor上面的评论,看起来这是微软的一个错误。
编辑:我没有得到downvote。有一个问题,微软将解决它。这就是为什么我的一些blob被忽略的答案......
“关于某些存储日志事件被忽略存在一个已知问题。这些事件通常是针对大型文件生成的。我们已经修复了它但尚未公开。很抱歉给您带来不便。 - Victor Hurdugaci Jan 9 at 12点23"
答案 1 :(得分:0)
就像解决方法一样,如果你不直接听Blob而不是在其间插入Queue,当你写入输入Blob容器时也会在队列中写一条关于新Blob的消息,该怎么办呢?让WebJob监听此队列,一旦消息到达队列,WebJob函数就会从输入Blob容器读取文件并复制到输出Blob容器中。 这个模型适合你吗?