gpt4 book ai didi

c# - 获取、处理和删除所有队列消息而不是一条一条地做?

转载 作者:行者123 更新时间:2023-12-03 03:15:57 25 4
gpt4 key购买 nike

我正在研究 Azure 队列。我需要获取、处理和删除所有队列消息。我现在所做的就是一一调用GetMessage,处理消息,然后调用DeleteMessage。

var message = _queue.GetMessage();
if (message == null)
{
return;
}
// processs
_queue.DeleteMessage(message);

有没有办法先获取所有消息然后处理它并删除所有这些已处理的消息?

最佳答案

您无法在一次调用中获取队列中的所有消息。 单次调用从队列中获取的最大消息数为 32。所以你需要做的是这样的:

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 条消息被处理并删除,您必须检查队列中是否还有更多消息。如果有消息,您将重复此过程。如果没有消息,那么您将退出循环。

关于c# - 获取、处理和删除所有队列消息而不是一条一条地做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26479724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com