不确定这个问题是否有意义,但这是我所观察到的。我的 Azure 函数使用 BlobTrigger 来处理上传到 Blob 存储的 PDF 文件。一切正常,直到我一次上传几个 blob,在这种情况下,使用下面的代码我观察到以下内容:
第一个 context.getLogger() 正确记录触发函数的每个 blob。
在 Azure 文件共享中,每个 PDF 文件都已正确保存。
在许多情况下,第二个 context.getLogger() 返回不正确的结果(来自其他文件之一),就好像在我的函数实例之间共享变量一样。请注意,对于每个 PDF,行 [19] 都是唯一的。
我稍后在我的代码中注意到类似的行为,其中记录了来自错误 PDF 的数据。
编辑:要清楚,我知道当多个实例并行运行时日志不会按顺序排列。但是,当我上传 10 个文件时,不是为行 [19] 获得 10 个唯一结果,而是大多数结果是重复的,并且当基于 XI 想要执行 Y 时,这个问题稍后在我的代码中恶化,并且 10 次调用中有 9 次产生垃圾数据。
主类
public class main {
@FunctionName("veninv")
@StorageAccount("Storage")
public void blob(
@BlobTrigger(
name = "blob",
dataType = "binary",
path = "veninv/{name}")
byte[] content,
@BindingName("name") String blobname,
final ExecutionContext context
) {
context.getLogger().info("BlobTrigger by: " + blobname + "(" + content.length + " bytes)");
//Writing byte[] to a file in Azure Functions file storage
File tempfile = new File (tempdir, blobname);
OutputStream os = new FileOutputStream(tempfile);
os.write(content);
os.close();
String[] lines = Pdf.getLines(tempfile);
context.getLogger().info(lines[19]);
}
}
pdf.class
public static String[] getLines(File PDF) throws Exception {
PDDocument doc = PDDocument.load(PDF);
PDFTextStripper pdfStripper = new PDFTextStripper();
String text = pdfStripper.getText(doc);
lines = text.split(System.getProperty("line.separator"));
doc.close();
return lines;
}
我真的不明白这里发生了什么,所以希望得到一些帮助。