C# Azure队列太慢-大约2分钟后,工作人员角色将拾取邮件

C# Azure队列太慢-大约2分钟后,工作人员角色将拾取邮件,c#,azure,C#,Azure,我在Web角色上有一个WCF,然后是一个Worker角色来处理WCF添加到azure队列中的消息 我正在做以下工作: var queue = queueStorage.GetQueueReference("myqueue"); var message = new CloudQueueMessage(string.Format("{0},{1}", pWord,processed)); queue.AddMessage(message); 然后我想等待消息处理完毕,但这太长了,一条消息平均需要

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

我正在做以下工作:

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

var message = new CloudQueueMessage(string.Format("{0},{1}", pWord,processed));
queue.AddMessage(message);
然后我想等待消息处理完毕,但这太长了,一条消息平均需要2分钟

关于我的工人角色,我有以下几点:

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);

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

代码似乎正在将相同的消息添加回队列。GetMessage仅使消息在30秒内不可访问(在处理消息时),并允许工作角色失败。详情请阅读。工作人员角色的流程:

  • 获取消息
  • 处理消息
  • 如果成功,请删除消息,否则重新尝试处理

另外请注意,除非您使用StringSplitOptions.None调用string.split,否则您不会得到占位符,并且结果数组只有2个元素长-请在

阅读更多内容,只需检查:在最后一段代码中,您正在创建对
myQueue
的引用。这是实际的队列名称,还是输入错误?队列名称必须全部小写。此外,由于您的消息是“{0},{1}”,因此您的行:var processed=Convert.ToBoolean(messageParts[2]);-应生成错误,因为messageParts只能作为messageParts[0]或messageParts[1]访问-您是否陷入了尝试/捕获?这只是为了替换我的实际队列名称…是的,我了解到队列名称只是小写的,但很难:)这不会生成任何异常Viperguynazo:队列消息绝对不会有2分钟的延迟。假设您关闭Nagle算法(有关ServicePointManager类的详细信息,请参阅),您将看到惊人的事务速率(高达每秒2000次)