获取、处理和删除所有队列消息,而不是逐个执行
本文关键字:执行 消息 队列 处理 删除 获取 | 更新日期: 2023-09-27 18:27:12
我正在处理Azure队列。我需要获取、处理和删除所有队列消息。我现在正在做的是逐个调用GetMessage、处理消息和调用DeleteMessage。
var message = _queue.GetMessage();
if (message == null)
{
return;
}
// processs
_queue.DeleteMessage(message);
有没有办法先获取所有消息,然后处理并删除所有这些处理过的消息?
您不能在一次调用中从队列中获取所有消息。CCD_ 1。所以你需要做的是:
var messages = _queue.GetMessages(32);
然后处理这些消息,而不是一次得到一条消息。
更新
因此,根据你的评论,有几件事:
- 队列有一个名为
ApproximateMessages
的属性,它将告诉您队列中大约有多少条消息。这应该会让您了解消息的总数 - 你不能一次删除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条消息被处理和删除,你就必须检查队列中是否还有其他消息。如果有消息,您将重复此过程。如果没有消息,那么您将退出循环。