Comprehensive Guide to Kue Job Queue System

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

Leave a Reply

Your email address will not be published. Required fields are marked *