Research
Security News
Malicious npm Package Targets Solana Developers and Hijacks Funds
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
BullMQ is a powerful, fast, and feature-rich library for handling distributed job queues in Node.js. It is built on top of Redis and provides a robust set of features for managing background jobs, scheduling tasks, and handling concurrency.
Job Queue Management
BullMQ allows you to create and manage job queues. You can add jobs to a queue and process them using workers. This is useful for offloading tasks that can be processed asynchronously.
const { Queue, Worker } = require('bullmq');
const myQueue = new Queue('my-queue');
// Adding a job to the queue
myQueue.add('my-job', { foo: 'bar' });
// Processing jobs from the queue
const worker = new Worker('my-queue', async job => {
console.log(job.name); // 'my-job'
console.log(job.data); // { foo: 'bar' }
});
Job Scheduling
BullMQ supports job scheduling, allowing you to delay the execution of jobs. This is useful for tasks that need to be executed at a later time.
const { Queue } = require('bullmq');
const myQueue = new Queue('my-queue');
// Scheduling a job to run in 5 seconds
myQueue.add('my-delayed-job', { foo: 'bar' }, { delay: 5000 });
Concurrency Control
BullMQ allows you to control the concurrency of job processing. You can specify the number of jobs that can be processed simultaneously by a worker.
const { Worker } = require('bullmq');
// Creating a worker with concurrency of 5
const worker = new Worker('my-queue', async job => {
console.log(job.name);
}, { concurrency: 5 });
Job Retries
BullMQ provides options for retrying failed jobs. You can specify the number of retry attempts and the backoff time between retries.
const { Queue } = require('bullmq');
const myQueue = new Queue('my-queue');
// Adding a job with retry options
myQueue.add('my-retry-job', { foo: 'bar' }, { attempts: 3, backoff: 5000 });
Kue is a priority job queue backed by Redis, built for Node.js. It provides a simple API for creating and processing jobs, but it lacks some of the advanced features and performance optimizations found in BullMQ.
Agenda is a lightweight job scheduling library for Node.js. It uses MongoDB for persistence and provides a simple API for defining and scheduling jobs. While it is easy to use, it does not offer the same level of performance and scalability as BullMQ.
Bee-Queue is a simple, fast, and robust job/task queue for Node.js, backed by Redis. It is designed for high performance and low latency, but it does not have as many features as BullMQ, such as job scheduling and advanced concurrency control.
The fastest, most reliable, Redis-based distributed queue for Node.
Carefully written for rock solid stability and atomicity.
Follow @manast for *important* Bull/BullMQ/BullMQ-Pro news and updates!
You can find tutorials and news in this blog: https://blog.taskforce.sh/
Do you need to work with BullMQ on platforms other than Node.js? If so, check out the BullMQ Proxy
Discover the latest in in-memory and real-time data technologies at Rediscover Scale 2024. Ideal for engineers, architects, and technical leaders looking to push technological boundaries. Connect with experts and advance your skills at The Foundry SF, San Francisco.
Supercharge your queues with a professional front end:
Sign up at Taskforce.sh
Dragonfly is a new Redisβ’ drop-in replacement that is fully compatible with BullMQ and brings some important advantages over Redisβ’ such as massive better performance by utilizing all CPU cores available and faster and more memory efficient data structures. Read more here on how to use it with BullMQ. |
Some notable organizations using BullMQ:
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
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 | β | β | ||||
Debouncing | β | β | β | |||
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 |
Fork the repo, make some changes, submit a pull-request! Here is the contributing doc that has more details.
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.
FAQs
Queue for messages and jobs based on Redis
The npm package bullmq receives a total of 703,439 weekly downloads. As such, bullmq popularity was classified as popular.
We found that bullmq demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.