出于集成检查的目的,我想计算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
的原因)?
答案 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);
}
关于队列计数的结果:
答案 1 :(得分:1)
现在我使用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>