An Introduction to Kue
Kue is a priority job queue backed by Redis, built for Node.js. It is designed to provide an easy way to manage a job queue with features like delayed jobs, job events, and retries.
Getting Started with Kue
First, let’s install Kue:
npm install kue --save
Creating a Job
Creating a job is straightforward using Kue:
const kue = require('kue'); const queue = kue.createQueue(); const job = queue.create('email', { title: 'Welcome email for new user', to: 'user@example.com', template: 'welcome-email' }).save(err => { if (!err) console.log(job.id); });
Processing a Job
Processing jobs from the queue can be done using:
queue.process('email', (job, done) => { email(job.data.to, job.data.template, done); }); function email(to, template, done) { // Email sending logic here done(); }
Job Events
Kue provides multiple events to keep track of the job states:
job.on('complete', () => { console.log('Job completed with data ', job.result); }).on('failed attempt', (errorMessage, doneAttempts) => { console.log('Job failed'); }).on('failed', errorMessage => { console.log('Job failed with error ', errorMessage); }).on('progress', (progress, data) => { console.log('\r job #', job.id, ' ', progress, '% complete with data ', data); });
Retrying Jobs
Kue supports job retries in case of failures:
queue.create('email', { title: 'Account deletion confirmation email' }).attempts(5).backoff({type: 'exponential'}).save();
Complex App Example
Let’s combine these APIs to build a simple app:
const express = require('express'); const kue = require('kue'); const queue = kue.createQueue(); const app = express(); app.post('/send-email', (req, res) => { const job = queue.create('email', { title: 'Sending email to user', to: req.body.to, template: 'email-template' }).save(err => { if (!err) res.status(200).send('Job created with ID: ' + job.id); }); }); queue.process('email', (job, done) => { email(job.data.to, job.data.template, done); }); function email(to, template, done) { // Email sending logic here console.log('Email sent to ', to); done(); } queue.on('job enqueue', id => { console.log('Job %s got queued', id); }).on('job complete', result => { kue.Job.get(result, (err, job) => { if (err) return; job.remove(err => { if (err) throw err; console.log('Removed completed job #%d', job.id); }); }); }); app.listen(3000, () => { console.log('Server is running on port 3000'); });
Now your app can handle job creation, processing, and job events! This covers only a part of the powerful features that Kue offers.
Hash: 4555a0b49453e7e3eeecc511fac9c38f5d24a31c97d21d77a4fd9da0754965bc