4

我刚刚开始修补 Windows Azure,如果有问题,我将不胜感激。

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

我需要此功能,因为我的工作流程的后续行为取决于该特定队列中所有工作项的完成。解决此问题的一种可能方法是计算放置和删除的数量。但这将再次需要在共享存储级别进行同步,如果可能的话,我想避免它。

有任何想法吗?

4

2 回答 2

7

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

Mike Wood 在博客中介绍了这种微妙之处,以及有关队列的 Clear 方法的花絮,请点击此处

也就是说:您可能希望为工作流管理选择不同的机制。也许是一个表格行,其中您的行键等于一些多队列项交易 ID,并且各个属性是状态标志。这允许您跟踪事务的失败部分(例如,10 个队列项目中有 9 个处理正常,第 10 个失败;您仍然可以删除第 10 个队列项目,但将其状态标志设置为失败,然后让您处理这种情况因此)。另外:假设您使用同一个队列来处理另一个“事务”(这意味着队列的长度再次非零)。通过使用像 Table Row 这样的单独对象,即使有其他队列消息,您仍然可以确定您的“事务”已完成。

于 2011-10-29T21:45:17.007 回答
-1

最好的方法是创建另一个队列,将其称为终止指示器队列,并在该队列中为您处理的来自主队列的每条消息放置一条消息。在研究项目中也是如此。看看这个http://www.cs.gsu.edu/dimos/content/gis-vector-data-overlay-processing-azure-platform.html

于 2012-02-18T15:49:56.890 回答