根据条件检索 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!");
}
}
我正在使用 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!");
}
}