Simple job queue using JSON messaging for managing backand background jobs. Backed up by Redis.
Based on @imqueue/core it provides Job Queue functionality including:
- Safe job processing - no data loss!
- Fast processing - by events, not timers, low resource usage.
- Supports gzip compression for job data (decrease traffic usage, but slower).
- Concurrent workers model supported, the same queue can have multiple consumers with no data loss and natural load-balancing.
- Scheduleable jobs - jobs can be delayed by specified time, granularity - milliseconds.
- Job expiration supported - job can live forever or specified time, granularity - milliseconds.
- Publisher/Worker/Both models of work with queues supported.
- TypeScript included!
See requirements for @imqueue/core
npm i --save @imqueue/job
import JobQueue, { JobQueuePublisher, JobQueueWorker } from '@imqueue/job';
// Standard job queue (both - worker and publisher) example
new JobQueue<string>({ name: 'TestJob' })
.onPop(job => console.log(job))
.start().then(queue => queue
.push('Hello, world!')
.push('Hello, world after 1 sec!', { delay: 1000 })
.push('Hello, world after 2 sec!', { delay: 2000 })
.push('Hello, world after 5 sec!', { delay: 5000 })
.push('Hello, world after 10 sec!', { delay: 10000 }),
);
// Job queue publisher-only example
new JobQueuePublisher<string>({ name: 'CustomTestJob' })
.start().then(queue => queue
.push('Hello, job world!')
.push('Hello, job world after 1 sec!', { delay: 1000 })
.push('Hello, job world after 2 sec!', { delay: 2000 })
.push('Hello, job world after 5 sec!', { delay: 5000 })
.push('Hello, job world after 10 sec!', { delay: 10000 }),
);
// Job queue worker only example
new JobQueueWorker<string>({ name: 'CustomTestJob' })
.onPop(job => console.log(job))
.start()
.catch(err => console.error(err));