@gotocva/queue v1.0.3
š¦ @gotocva/queue
An in-memory event queue for Node.js with retry and backoff support.
š Features
ā
In-memory queue (No Redis, No Database)
ā
Auto-retry failed jobs (with configurable attempts)
ā
Backoff delay before retry
ā
Process jobs sequentially
ā
Simple API, Lightweight, and Fast
š„ Installation
Install via npm:
npm install @gotocva/queue
Install via yarn:
yarn add @gotocva/queue
š Usage
1ļøā£ Basic Example
const Queue = require('@gotocva/queue');
const jobQueue = new Queue();
// Register event listener to process jobs
jobQueue.on('process', async (job, resolve, reject) => {
console.log(`Processing job: ${JSON.stringify(job)}`);
// Simulate a failing job (50% failure rate)
if (Math.random() > 0.5) {
return reject(new Error('Random Job Failure'));
}
setTimeout(resolve, 1000); // Simulate async task success
});
// Add jobs with retry & backoff
jobQueue.add({ id: 1, task: 'Send Email' }, { attempts: 3, backoff: 5000 });
jobQueue.add({ id: 2, task: 'Generate Report' }, { attempts: 3, backoff: 5000 });
š API Reference
š new Queue()
Creates a new instance of the in-memory queue.
š .add(job, options)
Adds a job to the queue.
Parameters
job
(Object) ā Job data (e.g.,{ id: 1, task: 'Send Email' }
)options
(Object, optional):attempts
(Number) ā Number of times to retry on failure (default:3
)backoff
(Number) ā Delay before retrying in ms (default:5000
)
Example
queue.add({ id: 1, task: 'Send Email' }, { attempts: 3, backoff: 5000 });
š .on('process', async (job, resolve, reject) => { ... })
Registers a listener that processes jobs.
Parameters
job
(Object) ā The job being processedresolve
(Function) ā Call this when the job succeedsreject
(Function) ā Call this when the job fails
Example
queue.on('process', async (job, resolve, reject) => {
try {
console.log(`Processing job: ${job.task}`);
resolve(); // Mark job as complete
} catch (error) {
reject(error); // Retry if job fails
}
});
ā” Advanced Example
Simulating API Calls & Retrying on Failure
const Queue = require('@gotocva/queue');
const axios = require('axios');
const apiQueue = new Queue();
// Process jobs (making API request)
apiQueue.on('process', async (job, resolve, reject) => {
console.log(`Calling API: ${job.url}`);
try {
const response = await axios.get(job.url);
console.log(`ā
API Success: ${response.status}`);
resolve();
} catch (error) {
console.error(`ā API Failed: ${error.message}`);
reject(error);
}
});
// Add an API call job
apiQueue.add({ url: 'https://jsonplaceholder.typicode.com/posts/1' }, { attempts: 5, backoff: 3000 });
š How It Works
Step | Description |
---|---|
1ļøā£ | Jobs are added to the queue using .add(job, options) . |
2ļøā£ | The process event is triggered for each job. |
3ļøā£ | If the job succeeds, resolve() is called. |
4ļøā£ | If the job fails, reject(error) is called, and the job retries based on attempts . |
5ļøā£ | Failed jobs wait (backoff ms) before retrying. |
š Why Use @gotocva/queue
?
ā
No Dependencies ā No need for Redis or external services
ā
Simple API ā Just add jobs and listen for events
ā
Fast & Lightweight ā Built for high performance
ā
Supports Retries ā Ensures jobs are processed reliably
āļø Comparison with Other Queues
Feature | @gotocva/queue | Bull (Redis) | Kue (Redis) |
---|---|---|---|
No Redis Required | ā Yes | ā No | ā No |
Retry & Backoff | ā Yes | ā Yes | ā Yes |
In-Memory | ā Yes | ā No | ā No |
Simple API | ā Yes | ā Complex | ā Complex |
Good for Small Apps | ā Yes | ā No | ā No |
š License
This project is licensed under the MIT License - see the LICENSE file for details.
šØāš» Author
gotocva - GitHub
ā Support
If you like this project, give it a ā on GitHub! š