我不确定问题是否清晰,但这是我观察到的情况。我的Azure函数使用BlobTrigger处理上传到Blob Storage的PDF文件。一切正常,直到我一次性上传多个blob,在这种情况下,使用以下代码,我观察到以下情况:
第一个context.getLogger()正确记录触发函数的每个blob。
在Azure文件共享中,每个PDF文件都被正确保存。
许多情况下,第二个context.getLogger()返回不正确的结果(来自其他文件之一),好像变量在我的函数实例之间共享。请注意,lines[19]对于每个PDF都是唯一的。
我注意到类似的行为在我的代码后面也出现了,其中错误的PDF数据被记录下来。
编辑:为明确起见,我知道当多个实例并行运行时,日志不会按顺序排列。然而,当我上传10个文件时,与lines [19]相关的大部分结果都是重复的,并且随着代码的进行,这个问题会恶化,当基于X执行Y时,有10个调用中有9个产生垃圾数据。
Main.class
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;
}
我不太明白这里发生了什么,所以希望能得到一些帮助。