C# 获取、处理和删除所有队列消息,而不是逐个执行?
我正在Azure队列上工作。我需要获取、处理和删除所有队列消息。我现在正在做的是调用GetMessage,处理消息并逐个调用DeleteMessageC# 获取、处理和删除所有队列消息,而不是逐个执行?,c#,azure,C#,Azure,我正在Azure队列上工作。我需要获取、处理和删除所有队列消息。我现在正在做的是调用GetMessage,处理消息并逐个调用DeleteMessage var message = _queue.GetMessage(); if (message == null) { return; } // processs _queue.DeleteMessage(message); 有没有办法先获取所有消息,然后再对其进行处理并删除所有这些已处理的消息?您无法在一次呼叫中从队列中获取所有消息
var message = _queue.GetMessage();
if (message == null)
{
return;
}
// processs
_queue.DeleteMessage(message);
有没有办法先获取所有消息,然后再对其进行处理并删除所有这些已处理的消息?您无法在一次呼叫中从队列中获取所有消息<代码>在一次呼叫中,您可以从队列中获得的最大消息数为32。所以你需要做的是:
var messages = _queue.GetMessages(32);
然后处理这些消息,而不是一次只收到一条消息
更新
根据你的评论,有几件事:
- 队列有一个名为的属性,它将告诉您队列中大约有多少条消息。这会让您了解消息的总数
- 您不能一次删除32封邮件。您需要一次删除一封邮件
do
{
var messages = _queue.GetMessages(32);
foreach (var msg in messages)
{
ProcessMessage(msg);
DeleteMessage(msg);
}
var approximateMessagesCount = _queue.FetchAttributes().ApproximateMessageCount.Value;
if (approximateMessagesCount == 0)
{
break;
}
} while (true);
基本上,您必须继续从队列中获取消息(一次32条),处理单个消息,然后在处理完消息后将其删除。处理并删除这32条消息后,您必须检查队列中是否还有其他消息。如果有消息,请重复此过程。如果没有消息,那么您将退出循环 我不确定队列中有多少条消息。您能举一个示例来获取所有消息(使用32个批中的_queue.GetMessages)并处理和删除吗?我们可以一次删除32条消息吗?更新了我的答案。很好,谢谢。但仍有问题需要解决。如果应用程序持续排队会怎么样。表示while循环将一直运行,直到应用程序停止排队。MaximumMessagesToProcessPerBatch可能在这里起作用。我认为最好是检查messages.Count()而不是ApproximateMessageCount,因为已经有messages对象。没有?我同意你的意见。该代码只是一个伪代码,用于解释如何从队列中获取和处理所有消息。通常,您希望将消息处理分布到多个节点,其中每个节点处理有限数量的消息。