【问题标题】:Azure Function timeout when accessing Blob访问 Blob 时 Azure 函数超时
【发布时间】: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 令牌。

标签: java azure


【解决方案1】:

在编辑中提到的异常之后,我进入了这个线程: https://github.com/Azure/azure-functions-java-worker/issues/381.

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

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

【讨论】:

    【解决方案2】:

    另一种解决方案是通过在本地环境中运行 azure 来找出确切的错误。大多数情况下,跟随错误是误导性的。

    FailureException: ClassCastException: java.lang.NoSuchMethodError 无法转换为 java.lang.RuntimeExceptionStack: java.lang.reflect.InvocationTargetExceptionat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at

    以下链接将帮助您在本地运行和调试 azure 函数。

    https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-maven-eclipse

    大部分时间问题也是由于依赖 jar 冲突,如上一篇文章所述。

    【讨论】:

      猜你喜欢
      • 2017-11-18
      • 2021-03-26
      • 2021-09-17
      • 2020-12-12
      • 2018-06-08
      • 2016-09-05
      • 2013-04-08
      • 2016-05-16
      • 1970-01-01
      相关资源
      最近更新 更多