Distributed task queue system with mesh architecture for Node.js
- Distributed Mesh Architecture - Auto-discovering server network
- Intelligent Routing - Capability-based job routing
- Retry Strategies - Exponential/linear backoff with jitter
- Workflow Engine - Job chains, workflows, distributed transactions
- Rate Limiting - Token bucket algorithm
- Observability - Metrics, tracing, structured logging
- Security - AES-256-GCM encryption, HMAC authentication
- Background Services - Automatic cleanup, stall detection
npm install bridgemqconst { Client } = require('bridgemq');
const client = new Client({
redis: { host: 'localhost', port: 6379 },
meshId: 'my-mesh',
});
await client.init();
const jobId = await client.createJob({
type: 'send-email',
payload: { to: 'user@example.com', subject: 'Hello!' },
config: {
priority: 5,
retry: { maxAttempts: 3 },
},
});const { Worker } = require('bridgemq');
const worker = new Worker({
redis: { host: 'localhost', port: 6379 },
meshId: 'my-mesh',
capabilities: ['email'],
});
worker.registerHandler('send-email', async (job) => {
await sendEmail(job.payload);
return { sent: true };
});
await worker.start();Servers auto-register and discover each other:
// Producer in US-East
const producer = new Client({ meshId: 'mesh-us-east' });
// Worker in US-West
const worker = new Worker({
meshId: 'mesh-us-west',
region: 'us-west',
capabilities: ['video:ffmpeg', 'gpu:cuda'],
});const { Workflow } = require('bridgemq');
const workflow = new Workflow(client, 'order-fulfillment');
await workflow
.addStep('validate', { type: 'validate-order' })
.addStep('charge', { type: 'charge-card' })
.addStep('ship', { type: 'ship-order' })
.execute({ orderId: '123' });await client.createJob({
type: 'api-call',
config: {
retry: {
maxAttempts: 5,
strategy: 'exponential', // or 'linear'
baseDelayMs: 1000,
maxDelayMs: 60000,
},
},
});createJob(jobData)- Create new jobgetJob(jobId)- Get job statuscancelJob(jobId)- Cancel jobgetQueue(meshId)- Get queue stats
registerHandler(type, handler)- Register job handlerstart()- Start processingstop()- Graceful shutdown
JobStorage- Job persistenceQueueStorage- Queue operationsServerStorage- Server registryMeshStorage- Mesh management
const { RateLimiter } = require('bridgemq');
const limiter = new RateLimiter(redis);
await limiter.checkAndQueue('api-key', 100, 60); // 100 per minuteconst { CircuitBreaker } = require('bridgemq');
const breaker = new CircuitBreaker({ failureThreshold: 5 });
await breaker.execute(async () => {
return await externalAPI.call();
});const { Metrics } = require('bridgemq');
const metrics = new Metrics(redis, { meshId: 'prod' });
metrics.incrementCounter('jobs_processed');
metrics.recordProcessingTime('email', 250);
console.log(metrics.exportPrometheus());- Throughput: 10,000+ jobs/sec per worker
- Latency: <5ms job creation, <10ms claim
- Memory: ~50MB per worker (idle)
- Redis: ~1KB per job
See /examples directory:
basic/producer.js- Simple job creationbasic/consumer.js- Basic workeradvanced/workflow.js- Complex workflowsadvanced/multi-mesh.js- Multi-region setupreal-world/email-service.js- Production example
MIT © Arjun-M