我正在尝试使用一个WebJob和一个辅助角色。
WebJob将具有BlobTrigger,每次将blob添加到容器时,新消息将添加到Azure存储队列(称为挂起blob )。
此外,将有一个工作者角色,它将汇集来自待定blob 队列的消息,并将blob名称添加到内部阻塞集合中,该集合将由几个由工人角色。
我认为在这个解决方案中设置了我的可扩展性,因为会有很多blob到达容器,所以我不想让CPU消耗高峰。
在开发解决方案时,我想到了一些问题:
答案 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)
FetchAttributes方法可用于获取Queue的不同属性。计数属性是这些属性之一。
roximateMessageCount属性返回由FetchAttributes方法检索的最后一个值,而无需调用队列服务。