大家好。我在Java 8中使用com.azure:azure-storage-blob
依赖项。我对这个项目的表现有一个问题。获取所有blobs:
BlobServiceClient client = new BlobServiceClientBuilder()
.connectionString("connectionString")
.buildClient();
client.getBlobContainerClient("containerName")
.listBlobs(new ListBlobsOptions().setPrefix("prefix"), null)
.stream()...
代码段工作得很好,但是如果我需要设置一个时间限制而不是null
,那么错误开始出现:
Exception in thread "main" reactor.core.Exceptions$ReactiveException: java.util.concurrent.TimeoutException: Did not observe any item or terminal signal within 1000ms in 'flatMap' (and no fallback has been configured)
底线是,我需要读取对象组并发送它们进行进一步处理,而不是等待所有对象。因为10个对象的等待时间肯定小于10000。我知道有continuationToken
,但是在返回的集合上调用它会抛出上面提到的异常。是否存在最优解?提前感谢
要了解有关错误的完整详细信息,请尝试启用存储日志并检查日志
使用下面来自MsDoc的示例代码:
ListBlobsOptions options = new ListBlobsOptions()
.setPrefix("prefixToMatch")
.setDetails(new BlobListDetails()
.setRetrieveDeletedBlobs(true)
.setRetrieveSnapshots(true));
String continuationToken = "continuationToken";
client.listBlobs(options, continuationToken, timeout).forEach(blob ->
System.out.printf("Name: %s, Directory? %b, Deleted? %b, Snapshot ID: %s%n",
blob.getName(),
blob.isPrefix(),
blob.isDeleted(),
blob.getSnapshot()));
否则,利用Duration.ofMinutes()
在你的代码中,如下所示:
Duration duration = Duration.ofMinutes(2);
containerClient.listBlobs(options, duration)
如果错误仍然发生,尝试更改Azure Java SDK的版本。
参考:
c# -设置Azure存储操作的超时时间-堆栈溢出
Azure azure-sdk-for-java/问题/15215