reduler

A redis-backed distributed task scheduler.

reduler - a redis-backed distributed task scheduler

Usage

var cluster = require('cluster');
var reduler = require('reduler');
var numCPUs = require('os').cpus().length;
 
reduler.connect();
 
if (cluster.isMaster) {
  for (var i = 0; i < numCPUs; ++i)
    cluster.fork();
 
  reduler.run();
 
  console.log((new Date()).toString() + ' adding...');
  reduler.add('multiply', [1, 2], {
    start: Date.now() + 10000
  }, function(errid) {
    console.log((new Date()).toString() + ' added: multiply [1, 2]', err, id);
  });
 
  console.log((new Date()).toString() + ' adding...');
  reduler.add('multiply', [3, 4], {
    start: Date.now() + 3000,
    repeats: 2
  }, function(errid) {
    console.log((new Date()).toString() + ' added: multiply [3, 4]', err, id);
  });
} else {
  var tasks = {
    'multiply'function (ab) {
      console.log(* b);
    }
  }
  reduler.worker(function(idnameargs) {
    console.log((new Date()).toString() + ' worker-' + cluster.worker.id, id, name, args);
    tasks[name].apply(null, args);
  });
}

Output:

Fri Nov 15 2013 14:23:38 GMT+0800 (CST) adding...
Fri Nov 15 2013 14:23:38 GMT+0800 (CST) adding...
Fri Nov 15 2013 14:23:38 GMT+0800 (CST) added: multiply [1, 2] null 5
Fri Nov 15 2013 14:23:38 GMT+0800 (CST) added: multiply [3, 4] null 6
Fri Nov 15 2013 14:23:41 GMT+0800 (CST) worker-1 6 multiply [ 3, 4 ]
12
Fri Nov 15 2013 14:23:48 GMT+0800 (CST) worker-2 5 multiply [ 1, 2 ]
2
Fri Nov 15 2013 14:24:41 GMT+0800 (CST) worker-1 6 multiply [ 3, 4 ]
12

API

Default host 127.0.0.1, port 6379.

  • name
  • args
  • options Object
    • start start date running the task, default is Date.now().
    • repeats default is 1, use 0 for unlimited.
    • period the time in milliseconds of repeat cycle, default 60000.
  • callback Function
    The callback gets two arguments (err, id).

The main loop handling tasks life cycle, there should have exactly one invocation.

The worker can be invoked from a process other than the one calling reduler.run().
The callback gets three arguments (id, name, args), where name and args are the ones from reduler.add().