在 Scala 中使用带有 java.nio.channels.ClosedChannelException 的 com.azure.storage.blob 包的基本 blob 下载失败

Posted

技术标签:

【中文标题】在 Scala 中使用带有 java.nio.channels.ClosedChannelException 的 com.azure.storage.blob 包的基本 blob 下载失败【英文标题】:Basic blob download fails using com.azure.storage.blob package with java.nio.channels.ClosedChannelException in Scala 【发布时间】:2022-01-07 14:28:41 【问题描述】:

我试图在 Scala 中复制 Azure Storage Blob client library for Java - Version 12.14.2 文档中的一个简单示例,但我只能获得 java.nio.channels.ClosedChannelException

我已经仔细检查了目标 blob ACL,并确认目标存储帐户上的网络防火墙已关闭(无限制)。

这里是主要代码:

val configUrl = "https://<storage_account>.blob.core.windows.net/<container>/<path>/application.conf"
val cred = new AzureCliCredentialBuilder().build()

val blobClient = new BlobClientBuilder()
      .endpoint(configUrl)
      .credential(cred)
      .buildClient();

val blockBlobClient = blobClient.getBlockBlobClient
val content = blockBlobClient.downloadContent

downloadContent 的调用给了我这个例外:

Exception in thread "main" reactor.core.Exceptions$ReactiveException: java.nio.channels.ClosedChannelException
    at reactor.core.Exceptions.propagate(Exceptions.java:392)
    at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:97)
    at reactor.core.publisher.Mono.block(Mono.java:1706)
    at com.azure.storage.common.implementation.StorageImplUtils.blockWithOptionalTimeout(StorageImplUtils.java:128)
    at com.azure.storage.blob.specialized.BlobClientBase.downloadContent(BlobClientBase.java:658)
    at com.....Main$.main(Main.scala:54)

我已尝试使用此处所示的 Azure CLI 凭据和存储帐户密钥凭据。我也尝试过使用BlobServiceClientBlobContainerClient,但得到了同样的错误。

【问题讨论】:

【参考方案1】:

在 Azure Java SDK 团队的帮助下,发现它是 Azure Java SDK 中的一个损坏的依赖项。在build.sbt 中添加依赖项覆盖为我修复了它:

dependencyOverrides += "io.netty" % "netty-all" % "4.1.70.Final"

【讨论】:

以上是关于在 Scala 中使用带有 java.nio.channels.ClosedChannelException 的 com.azure.storage.blob 包的基本 blob 下载失败的主要内容,如果未能解决你的问题,请参考以下文章

在 Scala 中使用带有 java.nio.channels.ClosedChannelException 的 com.azure.storage.blob 包的基本 blob 下载失败

带有 VScode 的 Scala

使用 Scala 类作为带有 pyspark 的 UDF

使用 Apache Zeppelin 重新运行带有 -deprecation 的 Scala 代码

未知工件 sbtplugin 带有 scala 2.12 的超级安全编译器

带有 Play2.4 和 scala 的 Google Guice 的循环依赖错误