0

我在 Web 角色上有一个 WCF,然后是一个工作角色来处理 WCF 添加到天蓝色队列的消息。

我正在执行以下操作:

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

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

然后我想等到消息处理完,但是这个时间太长了,一条消息平均要2分钟!!

在我的工人角色上,我有以下内容:

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

我对队列相当陌生,但我认为这应该可以工作并且每条消息的速度超过 2 分钟。任何帮助将不胜感激。

4

1 回答 1

0

代码看起来将相同的消息添加回队列。GetMessage 只会使消息在 30 秒内无法访问(在您处理消息时),并允许工作人员角色失败。阅读如何使用队列存储服务,特别是如何:将下一条消息出队以了解详细信息。工人角色的流程:

  • 获取消息
  • 进程消息
  • 如果成功,DeleteMessage 否则重新尝试处理。

另请注意,除非您使用 StringSplitOptions.None 调用 string.split,否则您不会获得占位符,并且结果数组只有 2 个元素长 - 请在String.Split Method (Char[], StringSplitOptions)阅读更多内容

于 2013-04-30T02:20:14.377 回答