java - 访问 Blob 时 Azure Function 超时

标签 java azure

从 Azure Function 访问 Azure 存储 Blob 时,我遇到了一个奇怪的问题。我有一个用 Java 编写的函数,它应该从 Blob 下载一些数据,然后执行 PowerShell 命令。 PowerShell 命令可以启动另一个访问同一个 Blob 的 Java 应用程序。我有这个过程,除了函数首先下载 Blob 的地方,它在尝试获取大小时总是会超时。

奇怪的是,由 PowerShell 命令启动的 Java 应用程序使用相同的代码来下载 Blob,并且可以毫无问题地完成此操作。

以下是相关代码片段:

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://github.com/Azure/azure-functions-java-worker/issues/381 .

问题在于,Function App 本身的依赖项是在我的代码的依赖项之前加载的,并且它们之间存在冲突,如下所述:https://github.com/Azure/azure-functions-java-worker/issues/365 .

解决方案是在 Function App 的配置设置中设置 FUNCTIONS_WORKER_JAVA_LOAD_APP_LIBS = 1。

关于java - 访问 Blob 时 Azure Function 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63361138/

相关文章:

java - 如何使用java在工作簿中创建Excel工作表?

azure - Eventhub Stream 未捕获架构不匹配

azure - 如何查看负载均衡器中实例的运行状况?

azure - 无法使用现有 VNET 和子网创建 Azure AKS 群集

java - Do - while 循环,使用 Char (Java) 进行条件循环

Java数组计算

JAXB 中的 java.awt.Point 和 java.awt.Rectangle

java - java编写xml时的xml命名空间

git - Azure DevOps Pipeline 不会根据另一个分支触发

azure devops 我如何制作一个将更新 2 个分支的管道?