Azure队列存储 - 在调用CloudQueue.GetMessages()后立即将消息标记为可见

时间:2013-03-13 11:51:45

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

问题:

我正在从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);
        }
    }
}

由于

2 个答案:

答案 0 :(得分:2)

您可以检查队列的“ApproximateMessageCount”属性(详情here),这样可以大致了解队列中有多少条消息在等待。

另外:你可以将消息的隐身超时设置为小的(可能是5-10秒?)。在此期间之后,该消息再次可见。您还可以在阅读后将隐身超时修改为更短的内容。

请记住,从队列中读取计为事务,更新消息也是如此(例如更新不可见性超时)。

等待100条消息可能是非最佳优化。哦,GetMessages()(详细信息here)限制为32条消息,所以等待100也没有意义。另外:交易真的非常便宜(每100K交易一分钱)。我不一定看到这里的价值。

答案 1 :(得分:0)

将过期时间重置为0.0。希望能够做到这一点。