处理消息队列和使用asynchronous

我写了一个小的testing节点应用程序,循环并将消息添加到队列(azure色的存储队列),如下所示:

var queueService = azure.createQueueService(); var queueName = 'taskqueue'; // other stuff like check if created // loop called after queue is confirmed for (i=0;i<1000;i++){ queueService.createMessage(queueName, "Hello world!", null, messageCreated); } // messageCreated does nothing at the moment, just logs to console 

我试图重写,以处理说100万创build使用asynchronous来控制并行运行的工作者函数的数量。 这比任何事情都是一个学习练习。

https://github.com/caolan/async#queue

这是asynchronous队列的基本设置,对于我需要更改的内容,我感到不知所措。 我不认为下面的工作:

 var q = async.queue(function (task, callback) { queueService.createMessage(queueName, task.msg, null, messageCreated); callback(); }, 100); // assign a callback. Called when all the queues have been processed q.drain = function() { console.log('all items have been processed'); } // add some items to the queue for(i=0;i<1000000;i++) { q.push({msg: 'Hello World'}, function (err) { console.log('finished processing foo'); }); console.log('pushing: ' + i); } 

我不太清楚如何将它们与asynchronous结合在一起。

这是你的错误:

 var q = async.queue(function (task, callback) { queueService.createMessage(queueName, task.msg, null, messageCreated); callback(); }, 100); 

你正在做的是在队列中创build一条消息,然后立即传递继续(调用callback)。 你想要做的是在传递给createMessage的callback中传递continuation:

 var q = async.queue(function (task, callback) { queueService.createMessage(queueName, task.msg, null, function(error, serverQueue, serverResponse) { callback(error, serverQueue, serverResponse); messageCreated(error, serverQueue, serverResponse); }); }, 100); 

现在每个任务都会在任务完成之后报告完成。

编辑:更新了createMessagecallback的界面。