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

问题描述 投票:3回答:3

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

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

此外,还有一个工作者角色,它将汇集来自待处理blob队列的消息,并将blob名称添加到内部阻塞集合中,该集合将由工作者角色触发的多个任务同时处理。

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

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

  • 有没有办法检查Azure存储队列中是否有消息?
  • 如果我调用GetMessage方法并且队列没有任何消息,则在新消息到达之前将阻止执行?
  • 有没有办法手动删除blob收据?
azure azure-storage-blobs azure-webjobs azure-worker-roles azure-storage-queues
3个回答
2
投票

有没有办法检查Azure存储队列中是否有消息?

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

如果我调用GetMessage方法并且队列没有任何消息,则在新消息到达之前将阻止执行?

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


0
投票

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

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


0
投票

CloudQueue类中的FetchAttributes方法可用于获取Queue的不同属性。 count属性是这些属性之一。

根据documentation

ApproximateMessageCount属性返回FetchAttributes方法检索的最后一个值,而不调用Queue服务。

© www.soinside.com 2019 - 2024. All rights reserved.