azure - 如何确定 Azure 队列中的所有消息是否都已处理完毕?

标签 azure azure-storage azure-queues

我刚刚开始修补 Windows Azure,希望能帮助解答一个问题。

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

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

有什么想法吗?

最佳答案

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

Mike Wood 在博客中介绍了这一微妙之处,以及有关队列 Clear 方法的花絮,here .

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

关于azure - 如何确定 Azure 队列中的所有消息是否都已处理完毕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7941532/

相关文章:

azure 。手动触发时释放未触发并卡住

c# - 使用 Azure Active Directory 进行身份验证时进行 Azure 管理库 API 调用时出错

运行 docker-compose up 时出现 Azure DevOps Pipeline 错误

c# - 在 azure 函数中查询 Azure 表存储并插入 Dynamics CRM

Azure 逻辑应用程序 - 从队列消息的原始输入中删除双引号

azure - Azure Key Vault 是否可以与函数一起使用来存储队列触发器的连接字符串?

azure - 设置-AzDataFactoryV2 : A parameter cannot be found that matches parameter name 'PublicNetworkAccess'

c# - 如何通过 URL 下载 Azure BLOB 存储文件

azure - Azure block Blob 和页 Blob 之间的区别?

azure - 监听队列(事件驱动,无轮询)服务总线/存储队列