Simple AMQP / RabbitMQ job queues for node
var queue = jackrabbit('amqp://localhost');
queue.on('connected', function() {
queue.create('jobs.greet', { prefetch: 5 }, onReady);
function onReady() {
queue.handle('jobs.greet', onJob);
queue.publish('jobs.greet', { name: 'Hunter' });
}
function onJob(job, ack) {
console.log('Hello, ' + job.name);
ack();
}
});
npm install --save jackrabbit
var jackrabbit = require('jackrabbit');
First, create a queue and connect to an amqp server:
var queue = jackrabbit(amqp_url, prefetch)
- amqp_url: eg, 'amqp://localhost'
- prefetch: messages to prefetch (default = 1)
Create (or assert) a queue.
queue.create(name, options, callback)
- name: name of the queue (eg, 'jobs.scrape')
- options: object with...
- durable (Boolean, default = true)
- prefetch (Number, default = 1)
- callback: callback function for result (err, queue_instance, queue_info)
Destroy a queue.
queue.destroy(name, callback)
- name: name of the queue
- callback: callback for result (err, destroyed)
You can destroy queues that exist or don't exist; if you try to destroy a queue that doesn't exist, destroyed = false. If a queue was destroyed, destroyed = true.
Publish a job to a queue.
queue.publish(name, message)
- name: name of the queue
- message: an Object that is your message / job to add to the queue
Start handling jobs in a queue.
queue.handle(name, handler)
- name: name of the queue
- handler: a Function to receive jobs (job, ack)
Jobs must be acknowledged. You can either ack immediately (so all jobs will be run at most once) or you can ack on job completion (so all jobs will run at least once).
Stop handling a queue.
queue.ignore(name)
- name: name of the queue
Purge a queue.
queue.purge(name, callback);
- name: name of the queue
- callback: Function to be called on completion with (err, countOfPurgedMessages)
- Run rabbit on 'amqp://localhost'
npm test