我刚刚开始修改Windows Azure,并希望得到一个问题的帮助。
如何确定Windows Azure队列是否为空并且其中的所有工作项是否已处理?如果我有多个工作进程查询工作项队列,则如果队列为空,则GetMessage(s)不返回任何消息。但是不能保证当前不可见的消息不会被推回到队列中。
我需要此功能,因为我的工作流的后续行为取决于特定队列中所有工作项的完成。解决此问题的一种可能方法是计算放置和删除的数量。但是这将再次需要在共享存储级别进行同步,如果可能的话我想避免它。
有什么想法吗?
答案 0 :(得分:5)
查看ApproximateMessageCount方法。这应该返回队列中的消息数,包括不可见的消息(例如正在处理的消息)。
迈克·伍德在博客中写到了这个微妙之处,以及关于队列清除方法的一点点,here。
这就是说:您可能希望为工作流程管理选择不同的机制。也许是一个表行,您的rowkey等于某个多队列项转换ID,并且各个属性是状态标志。这允许您跟踪事务的失败部分(例如,10个队列项中的9个处理正常,第10个失败;您仍然可以删除第10个队列项,但将其状态标志设置为失败,然后让您处理此场景因此)。另外:假设您使用相同的队列来处理另一个“事务”(意味着队列的长度再次为非零)。通过使用单独的对象(如表行),即使存在其他队列消息,您仍可以确定“事务”已完成。
答案 1 :(得分:-1)
最好的方法是建立另一个队列,将其称为终止指示符队列,并在该队列中为您的主队列中的每个消息添加一条消息。这也是研究项目的成果。看看http://www.cs.gsu.edu/dimos/content/gis-vector-data-overlay-processing-azure-platform.html