这是我正在使用的正确结构 – (kue,集群,节点)

嗨,我正在与kue , 群集 , redis ,node.js。 这里是一个非常简单的例子,稍后我会从外面调用testing函数。

我的目的是将一些传入作业添加到队列中并使用工作人员进行处理。

在我的情况下,当一个用户使用我的应用程序完成一个订单,他会收到一封电子邮件。 我会把电子邮件的详细信息发送到队列并使用工作人员进行处理。

var cluster = require('cluster'); var kue = require('kue'); var jobs = kue.createQueue(); var max_workers = 3; function test() { jobs.create('email', { title: 'welcome email for tj' , to: 'tj@learnboost.com' , template: 'welcome-email' }).save( function(err){ if( !err){} console.log( "no error"); }); if( cluster.isMaster ) { for (var i = 0; i < max_workers; i++) { cluster.fork(); console.log("forked -> "+i); } } else { jobs.process('email', function(jobs, done){ console.log('Job', jobs.id, 'is done'); done && done(); }); } } setInterval(test,3000); 

当我运行脚本node test.js我得到这个输出

 forked -> 0 forked -> 1 forked -> 2 no error forked -> 0 forked -> 1 forked -> 2 no error no error no error no error forked -> 0 forked -> 1 forked -> 2 no error no error no error no error no error no error no error forked -> 0 forked -> 1 forked -> 2 no error no error no error no error no error no error no error no error no error no error forked -> 0 forked -> 1 forked -> 2 no error no error no error no error no error no error no error no error no error no error no error no error no error forked -> 0 forked -> 1 forked -> 2 no error no error no error no error Job 176 is done no error Job 177 is done no error no error no error no error no error Job 178 is done no error no error no error Job 179 is done no error no error no error 

并继续….

所以,正如我所看到的,主进程正在运行,fork()subprocess再次运行,同时工作也正在完成。

我的问题是

  • 这是正确的模式? (我的目的是将一些传入作业添加到队列中,并使用工作人员来处理它)
  • 每次我使用jobs.create()创build一个作业,我的作业队列是否被重新创build,或者只是将新的作业追加到现有的队列中?
  • 当主进程再次分叉subprocess时,如果一个工人正在做一些工作,会发生什么事情,他会完成这个工作,还是这个工作将会停止呢?

我试图了解自己的几天,但仍有疑虑,如果任何人都可以解释这些背后的逻辑将非常感激:)

提前致谢 。