【问题标题】:How to get Azure Storage Queue size/position如何获取 Azure 存储队列大小/位置
【发布时间】:2016-08-28 04:36:11
【问题描述】:

所以我将一个项目从我的 ASP.NET Web API 发送到 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);

所以我在CloudQueueClient 和CloudQueue 周围寻找,但我能找到的只是CloudQueue.ApproximateMessageCount,它总是返回null。

我还尝试了一些谷歌搜索,它总是如何出现入门指南,特别指出我将如何获取队列中项目的大小和位置,所以它甚至可能吗?

【问题讨论】:

    标签: c# azure azure-storage azure-storage-queues


    【解决方案1】:

    无法获取项目在队列中的位置。

    对于大致的消息计数,您必须在检索值之前调用FetchAttributes 或FetchAttributesAsync。这将使用队列中的实际值填充ApproximateMessageCount。

    【讨论】:

    • 嗯,这有点糟糕,但至少因为队列中的每个项目都需要相同的时间来处理并且实际上知道ApproximateMessageCount 是如何工作的,所以我可以估计它所花费的时间并将其返回给用户,谢谢大家
    • @Toxicable:这主要是由于分布式队列的工作方式 - 无法保证消息的顺序。它会接近先进先出,但可能不是100%,所以你不能给出一个表示位置的数字,因为它有点模糊
    • 哦,我明白了,这是有道理的。我不知道这是一个分布式队列,这是有道理的,谢谢你清理它
    • @Toxicable 如果获取消息计数有助于在此处查看答案stackoverflow.com/questions/18283583/…
    • @Toxicable 请注意,服务总线队列与存储队列完全不同
    猜你喜欢
    • 2015-04-08
    • 2015-03-22
    • 2018-05-07
    • 2020-02-14
    • 2020-12-12
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多