我在Web角色上有一个WCF,然后是一个工作者角色来处理由WCF添加到azure队列的消息 .
我正在做以下事情:
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分钟..任何帮助将非常感激 .
1 回答
代码似乎是将相同的消息添加回队列 . GetMessage仅使消息在30秒内(处理消息时)无法访问,并允许工作者角色失败 . 有关详细信息,请阅读How to use the Queue Storage Service, specifically How to: De-queue the next message . Worker 角色的流程:
GetMessage
ProcessMessage
如果成功,则DeleteMessage重新尝试处理 .
另请注意,除非您使用StringSplitOptions.None调用string.split,否则您没有获得占位符,并且结果数组只有2个元素长 - 请阅读String.Split Method (Char[], StringSplitOptions)