首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js集群环境中的Redis队列

Node.js集群环境中的Redis队列
EN

Stack Overflow用户
提问于 2014-05-07 22:31:54
回答 1查看 2.6K关注 0票数 4

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

为了让我开始,您能建议从Node包支持或原始Redis命令来实现这一点吗?让我强调一下,在Node.js集群环境中,使用者是独立的进程,在这里,我们可以调整竞争从单个Redis队列读取的工作进程的数量,以调优整个系统性能。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-09 15:09:25

看来库伊正是我们所需要的。

在Node.js集群环境中,通过Redis进行最小测试程序队列任务:

代码语言:javascript
复制
// 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);
  });
}

示例运行(注意调整员工计数的命令行选项,等等):

代码语言:javascript
复制
[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
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23529635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档