@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/queueInstall 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! š