kue任务队列使用

kue三方库用于构建node的任务队列非常方便有效。注意kue是基于redis的,kue的队列将会存储于redis中,避免了主进程中的node内存的分配与阻塞。

// 安装
npm install kue --save

var kue = require('kue')
var cluster = require('cluster')
var config = require('../configs/configs')

var queues = kue.createQueue({
  prefix: 'q',
  redis: {
    port: config.REDIS_PORT,
    host: config.REDIS_HOST,
    auth: config.REDIS_PASSWORD,
    db: 15
  }
})

function createJob() {
  // 注意创建的任务名不要为'test',不然任务执行会有问题,此处有坑!
  let job = queues.create("jobName", {
    data: 'test'
  })
  .attempts(5)
  .backoff(true)
  .save(function(err) {
    if(err) {
      console.log(err)
      return
    }
    console.log('创建任务' + job.id + '成功!')
  });
  setTimeout(createJob, 0);
}

if (cluster.isMaster) {    
  console.log("主线程 %s 工作!创建任务!", process.pid)    
  for (let i = 0; i < 4; i++) {
    cluster.fork();
  }
  createJob();
  cluster.on('exit', function (worker, code) {
    console.log("worker线程 %s is died by %s", worker.process.pid, code);
  });
} else {
  queues.process('jobName', (job, done)=> {
    console.log("worker线程 %s 处理 job[%d][%s]", process.pid, job.id, job.data.name);
    setTimeout(done, 0);
  });
}

THE END!