如何确定Azure队列中的所有消息是否已被处理?

如何确定Azure队列中的所有消息是否已被处理?,azure,azure-storage,azure-queues,Azure,Azure Storage,Azure Queues,我刚刚开始修补WindowsAzure,如果有问题需要帮助,我将不胜感激 如何确定Windows Azure队列是否为空以及其中的所有工作项是否已被处理?如果有多个工作进程查询工作项队列,则如果队列为空,则GetMessage不会返回任何消息。但不能保证当前不可见的消息不会被推回队列 我需要此功能,因为工作流的后续行为取决于该特定队列中所有工作项的完成情况。解决此问题的一种可能方法是计算PUT和DELETE的数量。但这同样需要在共享存储级别进行同步,如果可能的话,我希望避免这种情况 有什么想法吗

我刚刚开始修补WindowsAzure,如果有问题需要帮助,我将不胜感激

如何确定Windows Azure队列是否为空以及其中的所有工作项是否已被处理?如果有多个工作进程查询工作项队列,则如果队列为空,则GetMessage不会返回任何消息。但不能保证当前不可见的消息不会被推回队列

我需要此功能,因为工作流的后续行为取决于该特定队列中所有工作项的完成情况。解决此问题的一种可能方法是计算PUT和DELETE的数量。但这同样需要在共享存储级别进行同步,如果可能的话,我希望避免这种情况

有什么想法吗?

看看这个方法。这应该返回队列中的消息数,包括不可见消息(例如正在处理的消息)

Mike Wood在博客中谈到了这一微妙之处,同时还介绍了队列的Clear方法


也就是说:您可能希望为工作流管理选择不同的机制。可能是一个表行,其中rowkey等于某个多队列项事务id,单个属性为状态标志。这允许您跟踪事务的失败部分(例如,10个队列项目中有9个处理正常,第10个失败;您仍然可以删除第10个队列项目,但将其状态标志设置为失败,然后允许您相应地处理此场景)。另外:假设您使用同一队列处理另一个“事务”(意味着队列长度再次非零)。通过使用单独的对象(如表行),您仍然可以确定您的“事务”已完成,即使存在其他队列消息。

最好的方法是使用另一个队列,将其称为终止指示符队列,并为来自主队列的每个消息在该队列中放置一条消息。在研究项目中也是如此。看看这个

谢谢大卫。这真的很有帮助。感谢您提供了关于在表中维护处理状态的提示-我会记住这一点。除了David所说的,还有一个出列计数,您可以用于此目的。