我有一个分布式应用程序,它与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);
}
此代码工作正常,但它也计算隐藏的消息。我想从计数中排除这些消息(因为那些任务还没有准备好执行)。
例如,我检查了我的一个队列并得到了579个项目在队列中的答案。但是,实际上没有可见的物品。我用Azure Storage Explorer验证了这一点:
如何只统计队列中的可见项?
答案 0 :(得分:1)
对您的问题的简短回答是,您无法统计队列中的可见消息。
近似消息计数将为您提供队列中消息总数的近似计数,并包括可见和不可见消息。
您可以做的一件事是max_arg_length
在邮件中,它会返回一个可见邮件列表。但是,它只会从队列中返回最多32个消息。因此,如果阈值小于32,您发送通知消息的逻辑将起作用。