3

问题:

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

谢谢

4

2 回答 2

2

您可以检查队列的 `ApproximateMessageCount' 属性(详情请点击此处),这将使您大致了解队列中有多少消息正在等待。

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

请记住,从队列中读取数据算作一个事务,更新消息也是如此(例如更新隐身超时)。

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

于 2013-03-13T12:04:15.430 回答
0

将过期时间重置为 0.0。这有望解决问题。

于 2013-03-13T12:02:27.303 回答