The fastest, most reliable, Redis-based distributed queue for Node. <br/>
Carefully written for rock solid stability and atomicity.
Read the documentation
<a href="https://openbase.com/js/bullmq?utm_source=embedded&utm_medium=badge&utm_campaign=rate-badge">
<img src="https://badges.openbase.com/js/rating/bullmq.svg"/>
</a>
<a href="https://gitter.im/OptimalBits/bull">
<img src="https://badges.gitter.im/Join%20Chat.svg"/>
</a>
<a href="https://badge.fury.io/js/bullmq">
<img src="https://badge.fury.io/js/bullmq.svg"/>
</a>
<a href="https://coveralls.io/github/taskforcesh/bullmq?branch=master">
<img src="https://coveralls.io/repos/github/taskforcesh/bullmq/badge.svg?branch=master"/>
</a>
<a href="https://github.com/semantic-release/semantic-release">
<img src="https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg"/>
</a>
<em>Follow <a href="https://twitter.com/manast">@manast</a> for *important* Bull/BullMQ/BullMQ-Pro news and updates!</em>
π Tutorials
You can find tutorials and news in this blog: https://blog.taskforce.sh/News π
Do you need to work with BullMQ on platforms other than Node.js? If so, check out the BullMQ ProxyOfficial FrontEnd
Supercharge your queues with a professional front end:
- Get a complete overview of all your queues.
- Inspect jobs, search, retry, or promote delayed jobs.
- Metrics and statistics.
- and many more features.
Sign up at Taskforce.sh
π Sponsors π
Used by
Some notable organizations using BullMQ:The gist
Install:$ yarn add bullmq
Add jobs to the queue:
import { Queue } from 'bullmq';
const queue = new Queue('Paint');
queue.add('cars', { color: 'blue' });
Process the jobs in your workers:
import { Worker } from 'bullmq';
const worker = new Worker('Paint', async job => {
if (job.name === 'cars') {
await paintCar(job.data.color);
}
});
Listen to jobs for completion:
import { QueueEvents } from 'bullmq';
const queueEvents = new QueueEvents('Paint');
queueEvents.on('completed', ({ jobId }) => {
console.log('done painting');
});
queueEvents.on(
'failed',
({ jobId, failedReason }: { jobId: string; failedReason: string }) => {
console.error('error painting', failedReason);
},
);
This is just scratching the surface, check all the features and more in the official documentation
Feature Comparison
Since there are a few job queue solutions, here is a table comparing them:| Feature | BullMQ-Pro | BullMQ | Bull | Kue | Bee | Agenda | | :------------------------ | :-------------: | :-------------: | :-------------: | :---: | -------- | ------ | | Backend | redis | redis | redis | redis | redis | mongo | | Observables | β | | | | | | | Group Rate Limit | β | | | | | | | Group Support | β | | | | | | | Batches Support | β | | | | | | | Parent/Child Dependencies | β | β | | | | | | Priorities | β | β | β | β | | β | | Concurrency | β | β | β | β | β | β | | Delayed jobs | β | β | β | β | | β | | Global events | β | β | β | β | | | | Rate Limiter | β | β | β | | | | | Pause/Resume | β | β | β | β | | | | Sandboxed worker | β | β | β | | | | | Repeatable jobs | β | β | β | | | β | | Atomic ops | β | β | β | | β | | | Persistence | β | β | β | β | β | β | | UI | β | β | β | β | | β | | Optimized for | Jobs / Messages | Jobs / Messages | Jobs / Messages | Jobs | Messages | Jobs |
Contributing
Fork the repo, make some changes, submit a pull-request! Here is the contributing doc that has more details.Thanks
Thanks for all the contributors that made this library possible,
also a special mention to Leon van Kammen that kindly donated
his npm bullmq repo.