【问题标题】:Retrieve number of messages in CloudQueue based on condition根据条件检索 CloudQueue 中的消息数
【发布时间】:2020-08-04 12:48:53
【问题描述】:

我正在使用 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();

【问题讨论】:

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


    【解决方案1】:

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

    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!");
                }
            }
    

    【讨论】:

    • 感谢您的回答。获取队列后如何应用过滤器?
    • 您使用的是什么 SDK?请编辑您的问题并包含获取消息的代码。
    • 我正在使用 Microsoft Azure Service Fabric
    • 谢谢。 PeekMessages() 最多可以查看 32 条消息,但是有没有办法查看所有消息? (~1000 条信息)
    • 很遗憾没有。另一种方法是调用GetMessages() 并使消息在足够长的时间内不可见,以便您可以遍历所有消息。但是请记住,调用 GetMessages() 会使消息出列并增加出列数。\
    猜你喜欢
    • 2014-04-16
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多