【发布时间】:2020-12-01 07:03:32
【问题描述】:
我在从 Azure 函数访问 Azure 存储 Blob 时遇到了一个奇怪的问题。我有一个用 Java 编写的函数,它应该从 Blob 下载一些数据,然后执行 PowerShell 命令。 PowerShell 命令可以启动另一个访问同一个 Blob 的 Java 应用程序。我有这个过程,除了函数首先下载 Blob 的地方,它总是在尝试获取大小时给出超时。
奇怪的是,PowerShell命令启动的Java应用程序使用相同的代码来下载Blob,并且可以毫无问题地下载。
这里是相关代码sn-p:
try {
blob = new BlobClientBuilder().endpoint(connStr).buildClient();
int dataSize = (int) blob.getProperties().getBlobSize(); // <- timeout occurs here
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(dataSize);
blob.download(outputStream);
outputStream.close();
String result = new String(outputStream.toByteArray(), "UTF-8");
return JsonParser.parseString(result).getAsJsonObject();
}
catch(Exception e) {
System.out.println("ERROR: "+e.getMessage());
e.printStackTrace();
return null;
}
一些相关信息:
Blob 非常小 - 只有几 KB。
两种情况都使用相同的连接字符串。
Blob 不是函数的触发器,而是为其存储数据。
编辑
在使用 Log Analytics 工作区获得更好的日志后,我发现超时是由 NoSuchMethodError 引起的。
java.lang.NoSuchMethodError: io.netty.handler.ssl.SslProvider.isAlpnSupported(Lio/netty/handler/ssl/SslProvider;)Z
当我使用错误版本的 netty-all-x.x.xFINAL.jar 之前,我已经看到此错误。已经在我用我的代码上传的 jar 中修复了这个问题,我现在想知道函数从哪里获取库,而不是我包含的库。
【问题讨论】:
-
你能告诉我你是如何定义端点的吗?
-
一般格式为“https://
.blob.core.windows.net/ / ”。我已经尝试使用 URL 和为该 blob 生成的 SAS 令牌。