如何确定是否已处理Azure队列中的所有邮件?

Ren*_*ack 3 azure azure-storage azure-queues

我刚刚开始修改Windows Azure,并希望得到一个问题的帮助.

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

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

有任何想法吗?

Dav*_*gon 5

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

迈克·伍德博客上讲述这个微妙,与有关队列的清除方法珍闻一起,在这里.

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