Nodejs集群仅将任务分配给一名工人(任何)
Nodejs cluster assign task only to one worker(Any)
我面临的问题是项目已经编程cluster
分发任务。
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
});
} else {
var server = http.createServer(app);
var usernames = {};
var showusernames = {};
var usersmessages = [];
require('../server/controllers/communication/chat.js').chatConfig(io, usernames);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
}
我有一个基本想法,即此代码用于在 cpu 之间分配任务并在其中一个 cpu 失败时保持服务器运行。
问题是:
一切正常,直到我需要开始使用节点来安排 cron
作业(将发送电子邮件)。
cron 现在由所有工作人员同时 运行 并且电子邮件发送给工作人员取决于服务器上有多少 cpu。
我通过安排工作来解决问题:
if(cluster.isWorker)
if(cluster.worker.id == 1){
cron.schedule('*/1 * * * *', function() {
//CRON JOB
})
}
这在本地系统中工作得很好,但在登台服务器中失败可能是因为 CPU 与这个项目一致。
Is there any way to get only the first free worker and assign task to
him.
现在我尝试了这个
var wokerArr = []
wokerArr.push(cluster.worker.id)
if(cluster.worker.id == wokerArr[0])
cron.schedule('*/1 * * * *', function() {
//CRON JOB
})
您可以在主进程本身中安排 cron
。 Cron需要以幂等的方式处理。
if (cluster.isMaster) {
cron.schedule('*/1 * * * *', function() {
//CRON JOB
})
// continue initializing workers here
}
我使用 crontab
做到了这一点。
制作一个单独的 cron 文件并在命令提示符下使用 crontab
安排作业以安排作业。感谢支持。
我面临的问题是项目已经编程cluster
分发任务。
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
});
} else {
var server = http.createServer(app);
var usernames = {};
var showusernames = {};
var usersmessages = [];
require('../server/controllers/communication/chat.js').chatConfig(io, usernames);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
}
我有一个基本想法,即此代码用于在 cpu 之间分配任务并在其中一个 cpu 失败时保持服务器运行。
问题是:
一切正常,直到我需要开始使用节点来安排 cron
作业(将发送电子邮件)。
cron 现在由所有工作人员同时 运行 并且电子邮件发送给工作人员取决于服务器上有多少 cpu。
我通过安排工作来解决问题:
if(cluster.isWorker)
if(cluster.worker.id == 1){
cron.schedule('*/1 * * * *', function() {
//CRON JOB
})
}
这在本地系统中工作得很好,但在登台服务器中失败可能是因为 CPU 与这个项目一致。
Is there any way to get only the first free worker and assign task to him.
现在我尝试了这个
var wokerArr = []
wokerArr.push(cluster.worker.id)
if(cluster.worker.id == wokerArr[0])
cron.schedule('*/1 * * * *', function() {
//CRON JOB
})
您可以在主进程本身中安排 cron
。 Cron需要以幂等的方式处理。
if (cluster.isMaster) {
cron.schedule('*/1 * * * *', function() {
//CRON JOB
})
// continue initializing workers here
}
我使用 crontab
做到了这一点。
制作一个单独的 cron 文件并在命令提示符下使用 crontab
安排作业以安排作业。感谢支持。