首页 文章

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

提问于
浏览
3

Problem:

我正在从Azure存储队列中读取消息,然后使用工作者角色将它们插入存储表 .

我想读取消息,但只在至少有100个时才处理它们(这是为了优化正在发生的存储表批量插入) . 如果消息少于100条,那么我想取消消息处理并使其在队列中立即可见,以便下一次读取队列 .

Question:

是否可以将 CloudQueue.GetMessages(...) 刚刚读取的消息标记为可见而无需等待超时到期?

Code: (在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 回答

  • 2

    您可以检查队列's `ApproximateMessageCount'属性(详细信息here),它可以让您大致了解队列中有多少消息在等待 .

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

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

    等待100条消息可能是非最佳优化 . 哦, GetMessages() (详情here)限制为32条消息,因此它不会在这里看到值 .

  • 0

    将过期时间重置为0.0 . 这将有希望成功 .

相关问题