何时更新CloudQueueClient ?

本文关键字:CloudQueueClient 更新 何时 | 更新日期: 2023-09-27 18:11:20

我在Web角色上有一个WCF,然后有一个Worker角色来处理由WCF添加到azure队列的消息。

我正在做以下事情:

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

然后我想等待消息被处理,但是我不知道我的队列对象是否会自己更新,或者我必须对它做一些事情。

在我的worker角色中,我有以下内容:

这是我的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);

我对队列相当陌生,但我认为这应该工作,所以我所需要的只是等待,直到消息被处理,但不知道它内部是如何工作的。

何时更新CloudQueueClient ?

不太确定等待消息被处理是什么意思。对于Azure队列,操作非常简单:

  • 将消息放入队列(带有消息TTL)
  • 从队列中读取消息(带有processing-timeout)。这个处理超时表示"我承诺在超时之前完成此消息的处理,然后在删除此消息。
  • 队列消息留在队列中,但在超时期间对所有其他读取器不可见。
  • 消息读取器然后从队列中删除消息。
  • 假设读取队列消息的代码在承诺的超时超时之前删除了消息,那么在QueueLand中一切都是好的。然而:如果处理超出了超时时间,那么消息将再次可见。和…如果其他人随后读取该消息,则原始读取器将失去删除该消息的权利(当他们尝试删除该消息时将得到异常)。

所以:长话短说:您可以在规定的超时时间内处理消息,然后删除它。如果您的代码在处理过程中崩溃,消息最终将重新出现,供其他人阅读。如果您想处理有毒消息,只需查看消息的DequeueCount属性,以查看它被读取了多少次(如果超过了某个阈值,则对消息做一些特殊的处理,例如将其保存在blob或表行中,以供开发团队将来检查)。

请参阅本文了解所有记录的队列限制(以及与服务总线队列的详细并排比较)。

相关文章:
  • 没有找到相关文章