如何检查Azure存储队列是否包含消息

时间:2016-08-29 22:10:44

标签: azure azure-storage-blobs azure-webjobs azure-worker-roles azure-storage-queues

我正在尝试使用一个WebJob和一个辅助角色。

WebJob将具有BlobTrigger,每次将blob添加到容器时,新消息将添加到Azure存储队列(称为挂起blob )。

此外,将有一个工作者角色,它将汇集来自待定blob 队列的消息,并将blob名称添加到内部阻塞集合中,该集合将由几个由工人角色。

我认为在这个解决方案中设置了我的可扩展性,因为会有很多blob到达容器,所以我不想让CPU消耗高峰。

在开发解决方案时,我想到了一些问题:

  • 有没有办法检查Azure存储队列中是否有消息?
  • 如果我调用GetMessage方法并且队列没有任何消息,则会在新消息到达之前阻止执行?
  • 有没有办法手动删除blob收据?

3 个答案:

答案 0 :(得分:2)

  

有没有办法检查Azure存储队列是否有邮件   内?

队列有一个ApproximateMessageCount属性,您可以检查队列深度(注意:这不是100%准确,因为在检查时可能会添加/删除消息)。

  

如果我调用GetMessage方法并且队列没有任何   消息将被阻止,直到新消息到达?

GetMessage()是非阻止的。如果没有消息,则呼叫返回。注意:由于您计划在工作者角色中创建自己的阅读器,因此在处理空队列时要小心:如果您将自己置于一个紧密的循环中并继续爆炸队列,则存在耗尽的风险队列的2000个事务/秒限制(并且您可能会看到过多的网络流量和CPU利用率)。您如何实施退避策略取决于您,但您希望合并某种类型的退避。

答案 1 :(得分:0)

如果使用Azure Functions来处理队列消息,可能会更好。只有在队列中出现新消息时才会触发它。

https://azure.microsoft.com/en-us/documentation/articles/functions-bindings-storage/

答案 2 :(得分:0)

CloudQueue类中的

FetchAttributes方法可用于获取Queue的不同属性。计数属性是这些属性之一。

根据documentation

roximateMessageCount属性返回由FetchAttributes方法检索的最后一个值,而无需调用队列服务。