Azure队列检查消息数

时间:2018-03-16 21:41:29

标签: azure message-queue azure-queues

出于集成检查的目的,我想计算Azure队列中的消息数。该方法如下所示:

internal void VerifyMessagesOnQueue(string queueNameKey, int expectedNumberOfMessages)
{
    var azureStorageConnectionKey = ConfigurationManager.AppSettings["AzureStorageConnectionKey"];
    var storageAccount = CloudStorageAccount.Parse(azureStorageConnectionKey);
    var queueClient = storageAccount.CreateCloudQueueClient();
    var queue = queueClient.GetQueueReference(ConfigurationManager.AppSettings[queueNameKey]);
    var messages = queue.PeekMessages(int.MaxValue);
    messages.Count().Should().Be(expectedNumberOfMessages);
}

现在我正在使用var messages = queue.PeekMessages(int.MaxValue);尝试获取队列中的所有消息。它返回一个HTML repsonse 400.我尝试了var messages = queue.PeekMessages(expectedNumberOfMessages);,但当expectedNumberOfMessages为0时,我也得到了一个HTML响应400.

如何在不中断的情况下可靠地检查Azure队列中的消息数(这就是我使用.PeekMessage的原因)?

2 个答案:

答案 0 :(得分:2)

  

我想计算Azure队列中的邮件数量

我建议您尝试使用以下代码来实现目标。我已经创建了一个测试控制台项目。

App.config中的StorageConnectionString:

<appSettings>
    <add key="StorageConnectionString" value="DefaultEndpointsProtocol=https;AccountName=×××;AccountKey=×××" />
</appSettings>

Program.cs中的代码:

 static void Main(string[] args)
        {
            string Queue_Name = "myqueue";
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    Microsoft.Azure.CloudConfigurationManager.GetSetting("StorageConnectionString"));
            CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();           
            CloudQueue queue = queueClient.GetQueueReference(Queue_Name);
            queue.FetchAttributes();
            var count=queue.ApproximateMessageCount;
            Console.WriteLine("message number in queue:"+count);
        }

关于队列计数的结果:

enter image description here

答案 1 :(得分:1)

Janley Zhang的回答是正确的。要获取队列中的近似消息计数,您需要获取队列的属性。添加新答案以阐明以下内容:

  

现在我使用var messages = queue.PeekMessages(int.MaxValue);   尝试获取队列中的所有消息。它返回一个HTML repsonse   400.我试过var messages = queue.PeekMessages(expectedNumberOfMessages);,但是当   expectedNumberOfMessages为0,我也得到一个HTML响应400。

基本上PeekMessages用于从队列顶部检索消息,而不会更改检索到的消息可见性。

单个请求中可从队列中获取的最大消息数为32,最小值为1.请查看此link(URI参数部分)以获取更多详细信息。

在这两种情况下,您都要指定超出允许范围的计数(1 - 32),这就是您从队列中获取400错误的原因。< / p>