问题:
我正在从Azure存储队列中读取邮件,然后使用工作者角色将它们插入存储表。
我想读取消息但只在至少有100个消息时处理它们(这是为了优化正在发生的存储表批量插入)。如果消息少于100条,那么我想取消消息处理并使其在队列中立即可见,以便下次读取队列。
问题:
是否可以将CloudQueue.GetMessages(...)
刚刚读取的消息标记为可见而无需等待超时到期?
代码:(在WorkerRole.cs中)
public override void Run()
{
while (true)
{
var messages = queue.GetMessages(100);
if (messages.Count() >= 100)
{
// This will process, insert into a table, and delete from the queue
ProcessMessages(messages);
}
else
{
//!!! MARK MESSAGES AS VISIBLE ON THE QUEUE
System.Threading.Thread.Sleep(1000);
}
}
}
由于
答案 0 :(得分:2)
您可以检查队列的“ApproximateMessageCount”属性(详情here),这样可以大致了解队列中有多少条消息在等待。
另外:你可以将消息的隐身超时设置为小的(可能是5-10秒?)。在此期间之后,该消息再次可见。您还可以在阅读后将隐身超时修改为更短的内容。
请记住,从队列中读取计为事务,更新消息也是如此(例如更新不可见性超时)。
等待100条消息可能是非最佳优化。哦,GetMessages()
(详细信息here)限制为32条消息,所以等待100也没有意义。另外:交易真的非常便宜(每100K交易一分钱)。我不一定看到这里的价值。
答案 1 :(得分:0)
将过期时间重置为0.0。希望能够做到这一点。