gpt4 book ai didi

node.js - Node.js集群环境下的Redis队列

转载 作者:IT王子 更新时间:2023-10-29 05:59:14 25 4
gpt4 key购买 nike

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

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

最佳答案

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

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

// 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

关于node.js - Node.js集群环境下的Redis队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23529635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com