Получить количество сообщений в CloudQueue на основе условия - PullRequest
0 голосов
/ 21 апреля 2020

Я использую Azure Storage Emulator. У меня есть CloudQueue и некоторые сообщения. Например, я хочу получить количество сообщений, для которых счетчик очереди больше 3. Например,

Я могу сделать для всех сообщений значение al oop и увеличить счетчик, если сообщение имеет счетчик очереди> 3, но я хотел бы найти оптимизированную альтернативу.

Как применить фильтры после извлечения очереди?

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

queue.FetchAttributes();

1 Ответ

1 голос
/ 22 апреля 2020

Я могу сделать все oop для всех сообщений и увеличить счетчик, когда сообщение имеет счетчик очередей> 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!");
            }
        }
...