不能使用BlobContainerAsyncClient来列出blobs。

问题描述 投票:0回答:1

我想使用 azure java sdk 12.0.6 版本从容器中列出 blobs。为了获得良好的性能,我使用了类的async方法。BlobContainerAsyncClient. 但我不能用该类列出blobs,而且我没有得到任何错误。

我的代码

ListBlobsOptions options = new ListBlobsOptions()
            .setDetails(new BlobListDetails()
                .setRetrieveDeletedBlobs(true)
                .setRetrieveSnapshots(true));

        client.listBlobs(options).subscribe(blob ->
            System.out.printf("Name: %s, Directory? %b, Deleted? %b, Snapshot ID: %s%n",
                blob.getName(),
                blob.isPrefix(),
                blob.isDeleted(),
                blob.getSnapshot()));
azure azure-storage azure-storage-blobs
1个回答
0
投票

关于这个问题,请参考以下代码。

ListBlobsOptions options = new ListBlobsOptions()
            .setDetails(new BlobListDetails()
                .setRetrieveDeletedBlobs(true)
                .setRetrieveSnapshots(true));
lient.listBlobs(options).doOnNext(blob ->
            System.out.printf("Name: %s, Directory? %b, Deleted? %b, Snapshot ID: %s%n",
                blob.getName(),
                blob.isPrefix(),
                blob.isDeleted(),
                blob.getSnapshot()))
             .blockLast();

enter image description here

而且,不能同时叫两个 subscribe()block(). 当你打电话 subscribe() 还你 Disposable 允许你取消异步操作,但你不能在这个对象上阻塞。如果你想确保相关方法被阻塞,你只需调用 block() 的类型(该类型有一个 block() 方法是一个 Mono 或可 Flux).


0
投票

你应该尝试两件事。

  1. 使用同步API,并确保你在那里得到你所期望的响应。如果你得到了你期望的结果,那就排除了与身份验证、容器名称等相关的问题。
  2. 因为你上面的代码是异步的,所以你需要确保应用程序在从服务收到响应之前没有退出。如果你能更新你上面的代码列表,更全面地展示你在做什么,我们可以排除这个问题。为了增加信心,你也可以选择做以下两件事中的一件来暂时增加信心,相信你的async代码是正确的。
    1. 暂时添加一个 Thread.sleep(5000) 调用后的调用。
    2. 替换掉 .subscribe() 呼叫 .block() 调用,实质上是将请求变回同步调用。
© www.soinside.com 2019 - 2024. All rights reserved.