2016-05-03 101 views
3

這樣的IM發送了我的ASP.NET Web API項目的Azure存儲隊列,我想提供自己的項目在隊列中的位置的一些反饋給用戶以及如果他們回來或類似的東西能夠更新他們的物品的位置。如何獲得Azure存儲隊列大小/位置

不在於它有很多工作要做,這裏的問題,但是這是使用放置在

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigHelper.GetAzureStorage()); 
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); 

CloudQueue queue = queueClient.GetQueueReference("my-queue"); 
await queue.CreateIfNotExistsAsync(); 

var messageJson = JsonConvert.SerializeObject(item); 
CloudQueueMessage cloudQueueMessage = new CloudQueueMessage(messageJson); 

await queue.AddMessageAsync(cloudQueueMessage); 

所以我戳周圍CloudQueueClientCloudQueue隊列項目的方法,但IM所有我能找到是總是返回null的CloudQueue.ApproximateMessageCount

我也嘗試了一下Google搜索的方式,總是提出入門指南,具體指出如何獲取大小然後在隊列中的項目位置,這樣它甚至有可能嗎?

回答

4

這是不可能獲得該項目的隊列中的位置。

對於大致的消息計數,您必須在檢索該值之前調用FetchAttributesFetchAttributesAsync。這將使用隊列中的實際值填充ApproximateMessageCount

+0

那麼這有點兒很爛,但至少從隊列中的每一項都需要相同的時間來處理,實際上知道如何ApproximateMessageCount''工作我可以估算的時間它會採取並返回給用戶,感謝堆 – Toxicable

+0

@毒性:這主要是由於分佈式隊列的工作方式 - 無法保證消息的排序。它將接近先進先出,但可能不是100%,所以你不能給出一個數字來表明位置,因爲它有點模糊 – porges

+0

哦,我明白了,這是有道理的。我不知道這是一個分佈式隊列,這是有道理的,謝謝你清理那個 – Toxicable