Azure 队列检查消息数
Azure queue check number of messages
为了进行集成检查,我想计算 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);
来尝试获取队列中的所有消息。它 returns 一个 HTML 响应 400。我试过 var messages = queue.PeekMessages(expectedNumberOfMessages);
,但是当 expectedNumberOfMessages
为 0 时,我也得到一个 HTML 响应 400。
如何在不中断 Azure 队列的情况下可靠地检查消息数量(这就是我使用 .PeekMessage
的原因)?
I want to count the number of messages on an Azure queue
我建议您可以尝试使用以下代码来实现您的目标。我已经创建了一个控制台项目来测试。
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);
}
关于队列计数的结果:
Janley Zhang 的回答是正确的。要获得队列中的近似消息数,您需要获取队列的属性。添加新答案以澄清以下内容:
Right now I'm using var messages = queue.PeekMessages(int.MaxValue);
to try to get all the messages on a queue. It returns an HTML repsonse
400. I have tried var messages = queue.PeekMessages(expectedNumberOfMessages);, but when
expectedNumberOfMessages is 0, I also get an HTML response 400.
本质上 PeekMessages
用于从队列顶部检索消息而不改变检索消息的可见性。
单个请求中可从队列中提取的最大消息数为 32,最小为 1。请查看此 link
(URI 参数部分)了解更多详细信息。
在这两种情况下,您指定的计数超出了允许的范围 (1 - 32),这就是您从队列中返回 400
错误的原因。
为了进行集成检查,我想计算 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);
来尝试获取队列中的所有消息。它 returns 一个 HTML 响应 400。我试过 var messages = queue.PeekMessages(expectedNumberOfMessages);
,但是当 expectedNumberOfMessages
为 0 时,我也得到一个 HTML 响应 400。
如何在不中断 Azure 队列的情况下可靠地检查消息数量(这就是我使用 .PeekMessage
的原因)?
I want to count the number of messages on an Azure queue
我建议您可以尝试使用以下代码来实现您的目标。我已经创建了一个控制台项目来测试。
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);
}
关于队列计数的结果:
Janley Zhang 的回答是正确的。要获得队列中的近似消息数,您需要获取队列的属性。添加新答案以澄清以下内容:
Right now I'm using var messages = queue.PeekMessages(int.MaxValue); to try to get all the messages on a queue. It returns an HTML repsonse 400. I have tried var messages = queue.PeekMessages(expectedNumberOfMessages);, but when expectedNumberOfMessages is 0, I also get an HTML response 400.
本质上 PeekMessages
用于从队列顶部检索消息而不改变检索消息的可见性。
单个请求中可从队列中提取的最大消息数为 32,最小为 1。请查看此 link
(URI 参数部分)了解更多详细信息。
在这两种情况下,您指定的计数超出了允许的范围 (1 - 32),这就是您从队列中返回 400
错误的原因。