根据条件检索 CloudQueue 中的消息数

Retrieve number of messages in CloudQueue based on condition

我正在使用 Azure 存储模拟器。我有一个 CloudQueue 和一些消息。 例如,我想检索 Dequeue Count 大于 3 的消息数。

我可以对所有消息进行循环,并在消息的出队计数 > 3 时递增计数器,但我想找到一个优化的替代方案。

获取队列后如何应用过滤器?

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnection"];
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
CloudQueue queue = queueClient.GetQueueReference("testQueue");
queue.CreateIfNotExists();

queue.FetchAttributes();

I can do a loop for all the messages and increment a counter when a message has a Dequeue Count > 3 but I would like to find an optimized alternative.

AFAIK,这是唯一的方法,因为 Azure 存储队列不提供任何基于消息属性的服务器端过滤机制。您将需要获取消息并仅在客户端应用过滤。

下面是查看队列中前 32 条消息并检查消息的 DequeueCount 属性 的示例代码:

        var account = new CloudStorageAccount(new StorageCredentials(accountName, accountKey), true);
        var queueClient = account.CreateCloudQueueClient();
        var queue = queueClient.GetQueueReference("myqueue");
        queue.CreateIfNotExists();
        var messages = queue.PeekMessages(32).ToList();
        for (var i=0; i<messages.Count; i++)
        {
            var message = messages[0];
            if (message.DequeueCount > 3)
            {
                Console.WriteLine("Message has been dequeued more than 3 times. Do something!");
            }
        }