que

Interface to many worker queue backends.

Que

One interface to many queue & worker backends.

Installation

npm install que

Supported backends

Usage

var Que = require('que');
 
Que.connect(['gearman://127.0.0.1:4730'], function(){
    // all backends connected 
});
 
Que.disconnect(function(){
    // all backends disconnected 
});
var EchoReverseWorker = Que.define({
    job: 'echoReverse', // job name 
    driver: 'gearman', // driver's name 
    processfunction(callback) { // processing function 
        var result = this.params.message.split('').reverse().join(''); // this.params contains all the data you send, let's just reverse the string 
        callback(false, { echo: result }); // first argument specifies error(none, in our case), second - response 
    }
});
EchoReverseWorker.submit({ message: '2pac' }, function(errresponse){ // second argument is optional 
    response.echo == 'cap2'; // true 
});

You can define workers using CoffeeScript native class system:

class EchoReverseWorker extends Que.Worker
    job: 'echoReverse'
    driver: 'gearman'
    
    process: (callback) ->
        result = @params.message.split('').reverse().join('')
        callback false, echo: result
 
EchoReverseWorker = Que.Workers.setup EchoReverseWorker # this is required

Your driver should implement this interface:

class SomeDriver
    @connect: (server, callback) ->
        # server is an URI, like protocol://127.0.0.1:1234
        # callback should be called when you connect to a backend
    
    @disconnect: (callback) ->
        # callback should be called when you disconnect from a backend
    
    @register: (name, handler) ->
        # name is the name of the job
        # handler is the function which handles the job
    
    @submit: (name, params) ->
        # name is the name of the job
        # params is the data that should be sent

After that, you should register your driver under chosen name:

Que.registerDriver 'someDriver', SomeDriver

Users of your driver will be able to connect to it using URL like someDriver://localhost:port/.

Tests

Run all the needed backends and execute mocha in Terminal.

License

MIT.