这是我正在使用的正确结构 - (kue,cluster,node)

时间:2016-01-12 11:17:20

标签: javascript node.js express message-queue kue

您好我正在使用kueclusterredis,node.js。这是一个非常简单的例子,稍后我会从外面调用测试函数。

我的目的是将一些传入的作业添加到队列中并使用worker处理它。

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

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()子进程再次进行,并且还完成了工作。

我的问题是

  • 这是正确的型号吗? (我的目的是将一些传入的作业添加到队列中并使用工作程序处理它)
  • 每次使用jobs.create()创建作业时,是重新创建作业队列还是只将新作业附加到现有队列?
  • 当主进程再次分叉子进程时,如果一个工作人员正在做一些工作会发生什么,他会完成这项工作还是该工作将被停止未完成?

我试着自己了解了几天,但仍然有疑问,如果有人能够解释这些背后的逻辑,那将非常感激:)

提前致谢。

0 个答案:

没有答案