繁体   English   中英

使用azure-storage-api java的downloadAttributes上不存在指定的Blob

[英]The specified blob does not exist on downloadAttributes with azure-storage-api java

我们有许多(〜1000)个使用者尝试从Blob存储中获取文件的应用程序。 Blob文件没有并发访问权限,但是它们共享一个存储帐户。 我看到Blob存储上有可用的文件,但是我们不断看到以下异常

Caused by: com.microsoft.azure.storage.StorageException: The specified blob does not exist.
at com.microsoft.azure.storage.StorageException.translateFromHttpStatus(StorageException.java:207)[3:org.ops4j.pax.logging.pax-logging-service:1.6.9]
at com.microsoft.azure.storage.StorageException.translateException(StorageException.java:172)[3:org.ops4j.pax.logging.pax-logging-service:1.6.9]
at com.microsoft.azure.storage.core.StorageRequest.materializeException(StorageRequest.java:306)[3:org.ops4j.pax.logging.pax-logging-service:1.6.9]
at com.microsoft.azure.storage.core.ExecutionEngine.executeWithRetry(ExecutionEngine.java:177)[3:org.ops4j.pax.logging.pax-logging-service:1.6.9]
at com.microsoft.azure.storage.blob.CloudBlob.downloadAttributes(CloudBlob.java:1268)[3:org.ops4j.pax.logging.pax-logging-service:1.6.9]
at com.microsoft.azure.storage.blob.CloudBlob.downloadAttributes(CloudBlob.java:1235)[3:org.ops4j.pax.logging.pax-logging-service:1.6.9]

我们正在使用

Azure存储API 1.1.0

这是已知的错误或限制吗? 在什么情况下我们将获得此例外?

我们使用以下代码下载Blob

String storageConnectionString = "DefaultEndpointsProtocol=http;AccountName="+ storageAccount + ";AccountKey=" + primaryAccessKey;
CloudStorageAccount account = CloudStorageAccount.parse(storageConnectionString);
CloudBlobClient blobClient = account.createCloudBlobClient();
CloudBlobContainer container = blobClient.getContainerReference(containerName.toLowerCase());
CloudBlockBlob blockBlob = container.getBlockBlobReference(fileName);
blockBlob.downloadAttributes();
//http://stackoverflow.com/questions/1071858/java-creating-byte-array-whose-size-is-represented-by-a-long
int size = (int)blockBlob.getProperties().getLength();
out = new byte[size];
blockBlob.downloadToByteArray(out, 0);

什么是constantly always ,还是当有X个以上的消费者试图获取Blob时?

Azure存储可伸缩性目标上,您可以了解有关目标可伸缩性参数的更多信息。 其中之一是单个Blob的目标吞吐量:

单个Blob的目标吞吐量每秒高达60 MB,或每秒多达500个请求

对于您的1000个消费者,毫无疑问,当您查询相同的Blob时,您达到了该限制。 问题是-您是否真的需要从Blob中获取大量信息,可以将其缓存在某个地方(中间面)还是可以使用CDN(它也可以与SAS一起使用)

如果1000个消费者击中1000个不同的Blob,则存在一些限制,例如:

每个存储帐户的总请求速率 (假设1KB对象大小)高达20,000 IOPS ,每秒实体数或每秒消息

对于1000个使用者来说,每秒发出20个请求-基于文件中的块数,也很可能是该限制。

无论如何,您都应该修改您的应用程序并发现达到的限制。

这只是为了让以后浏览此问题的人在浏览所有下载请求的URL之后弄清楚。

一堆不存在的Blob网址导致了此异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM