CloudQueueClient何时更新?

时间:2013-04-29 23:09:42

标签: c# azure

我在Web角色上有一个WCF,然后是一个工作者角色,用于处理WCF添加到azure队列的消息。

我正在做以下事情:

var queue = queueStorage.GetQueueReference("myqueue");

var message = new CloudQueueMessage(string.Format("{0},{1}", pWord,processed));
queue.AddMessage(message);

然后我想等到消息处理完毕,但我不知道我的队列对象是否会自行更新,或者我必须对此做些什么。

关于我的工作角色,我有以下内容:

这是我的onStart方法:

CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
        inputQueue = queueClient.GetQueueReference("myqueue");

然后在我的Run方法上:

while (true)
            {
                try
                {
                    // Retrieve and process a new message from the queue.
                    msg = inputQueue.GetMessage();
                    if (msg != null)
                    {
                        result = processMessage(msg);

在我的processMessage方法上:

var messageParts = msg.AsString.Split(new char[] { ',' });
            var word = messageParts[0];
            var processed = Convert.ToBoolean(messageParts[2]);
            word = "recibido";
            processed = true;
            addMessageToQueue2(userId,processed);
            return 1;

向队列添加消息:

var queue = outputQueue.GetQueueReference("myQueue");
            var message = new CloudQueueMessage(string.Format("{0},{1}", pWord, pProcessed));
            queue.AddMessage(message);

我对队列相当新,但我认为这应该有效,所以我只需等待消息处理完毕,但不知道它是如何在内部工作的。

1 个答案:

答案 0 :(得分:0)

不太确定在处理邮件之前等待的意思。使用Azure队列,操作非常简单:

  • 将消息放入队列(使用消息TTL)
  • 从队列中读取消息(具有处理超时)。此处理超时显示“我保证在达到此超时之前完成处理此消息,然后删除此消息。”
  • 队列消息保留在队列中,但在超时期间对所有其他读者不可见。
  • 消息阅读器然后从队列中删除消息。
  • 假设读取的代码队列消息在承诺超时到期之前删除了消息,QueueLand中的一切都很好。 然而:如果处理超出了超时时间,则该消息再次可见。并且......如果其他人然后读取该消息,原始读者将失去删除它的权利(他们在尝试时会得到例外)。

所以:长话短说:您可以在规定的超时期限内根据需要处理邮件,然后将其删除。如果您的代码在处理期间崩溃,则该消息最终会重新出现以供其他人阅读。如果你想处理有害消息,只需查看消息的DequeueCount属性,看看它被读取了多少次(如果超过某个阈值,可以使用消息,就像将它放在一个blob或table行中,以供开发团队今后检查)。

有关所有已记录的队列限制(以及与服务总线队列的详细并排比较),请参阅this article