Azure存储队列 - 计算可见消息

No1*_*ver 5 c# azure azure-storage-queues

我有一个分布式应用程序,它与Azure存储队列共享负载.为了验证一切正常,我写了一个小应用程序,每10分钟运行一次并检查队列中有多少项.如果该数字高于阈值,请向我发送通知消息.

这就是我在所有队列中运行的方式:

Dictionary<string, int> dic = new Dictionary<string, int>();
foreach (CloudQueue queue in QueuesToMonitor)
{
    queue.FetchAttributes();
    dic.Add(queue.Name, queue.ApproximateMessageCount.HasValue ? queue.ApproximateMessageCount.Value : -1);
}
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常,但它也计算隐藏的消息.我想从计数中排除这些消息(因为那些任务还没有准备好执行).

例如,我检查了我的一个队列并得到了579个项目在队列中的答案.但是,实际上没有可见的物品.我用Azure Storage Explorer验证了这一点: 0 579

如何只计算队列中的可见项?

Gau*_*tri 1

对您问题的简短回答是,您无法获取队列中仅可见消息的计数。

近似消息计数将为您提供队列中消息总数的近似计数,并且包括可见消息和不可见消息。

您可以做的一件事是PEEK查看消息,它会返回给您可见消息的列表。但是,它最多只会返回队列中前 32 条消息。因此,如果阈值小于 32,则发送通知消息的逻辑将起作用。

  • 这是个坏消息。Peek 无法解决问题,因为我使用的阈值超过 5000 条消息。那么,Azure 存储资源管理器如何提取信息呢?它做得很好。 (3认同)