Redis队列在Node.js集群环境中

使用Node.js集群支持,我希望主进程生成添加到Redis队列中的数据项。 然后我想运行多个读取Redis队列的工作进程。 当然,只有一个工作进程应该使用从队列中检索的数据项。

为了让我开始,你可以build议在哪里看节点包支持或原始的Redis命令来完成这个? 让我强调,在Node.js集群环境中,消费者是独立的进程,我们可以调整竞争从单个Redis队列中读取的工作进程的数量,以调整整个系统的性能。

看起来像kue就是我们所需要的。

在Node.js集群环境中通过Redis最小的testing程序排队任务:

// cluster-queue.js var kue = require('kue'); var cluster = require('cluster'); var numWorkers = process.argv[2]; var numParallel = process.argv[3]; var jobDelay = process.argv[4]; var numJobs = process.argv[5]; if (process.argv.length !== 6) { console.log('Usage: node cluster-work-queue <numWorkers> <numParallel> <jobDelay> <numJobs>'); process.exit(1); } var jobs = kue.createQueue(); var jobType = 'someTask'; if (cluster.isMaster) { for (var i = 0; i < numWorkers; i++) { cluster.fork(); } for (var j = 0; j < numJobs; j++) { (function(count) { var data = { count: count }; jobs.create(jobType, data).save(function(err) { if (err) { console.log('jobs.create', err); } else { console.log('master', 'jobs.create', count); } }); })(j); } } else { jobs.process(jobType, numParallel, function(job, done){ console.log('worker', cluster.worker.id, 'jobs.process', job.data); setTimeout(function() { done(); }, jobDelay); }); } 

示例运行(注意命令行选项来调整工人数量等):

 [jfathman@cloud node]$ node cluster-queue.js 2 1 20 10 master jobs.create 0 master jobs.create 1 master jobs.create 2 master jobs.create 3 master jobs.create 4 master jobs.create 5 master jobs.create 6 master jobs.create 7 master jobs.create 8 master jobs.create 9 worker 1 jobs.process { count: 0 } worker 2 jobs.process { count: 1 } worker 1 jobs.process { count: 2 } worker 2 jobs.process { count: 3 } worker 1 jobs.process { count: 4 } worker 2 jobs.process { count: 5 } worker 1 jobs.process { count: 6 } worker 2 jobs.process { count: 7 } worker 1 jobs.process { count: 8 } worker 2 jobs.process { count: 9 } ^C