【问题标题】:Nodejs cluster assign task only to one worker(Any)Nodejs集群仅将任务分配给一个工作人员(任何)
【发布时间】:2018-06-04 18:41:32
【问题描述】:

我面临的问题是该项目已经用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 与该项目对齐。

有没有办法只获得第一个空闲工人并将任务分配给 他。

现在我试过了

var wokerArr = []
wokerArr.push(cluster.worker.id)
if(cluster.worker.id == wokerArr[0])
cron.schedule('*/1 * * * *', function() {
    //CRON JOB
})

【问题讨论】:

    标签: node.js multithreading cron node-cluster


    【解决方案1】:

    我使用crontab 做到了这一点。 制作一个单独的 cron 文件并在命令提示符下使用 crontab 安排作业以安排作业。感谢支持。

    【讨论】:

      【解决方案2】:

      您可以在主进程本身中安排cron。 Cron 需要以幂等方式处理。

      if (cluster.isMaster) {
        cron.schedule('*/1 * * * *', function() {
           //CRON JOB
        })
      
        // continue initializing workers here
      }
      

      【讨论】:

      • 感谢您的回复。我实际上想出了一些更合适的东西。使用crontab 单独执行 cron 作业。但你的答案是正确的。 :)
      • 什么是多台服务器可以做master?
      猜你喜欢
      • 1970-01-01
      • 2020-09-12
      • 2016-01-15
      • 2014-06-28
      • 2019-12-25
      • 2020-02-26
      • 1970-01-01
      • 2022-08-22
      • 1970-01-01
      相关资源
      最近更新 更多