A lightweight, non-blocking job queue system inspired by BullMQ, built on Redis Streams. Specializes in both cron jobs and one-off tasks with decoupled architecture for maximum flexibility and performance.
import { QueueManager } from '@leotermine/redismq'; import { Redis } from 'ioredis'; // Initialize Redis and Queue Manager const client = new Redis(); const app = QueueManager.init(client, {}, 5); // 5 concurrent jobs // Define a cron job const cronJob = { path: 'tasks/recurring', run: async (ctx, job) => { console.log('Running scheduled task:', job.id); }, options: { repeat: { pattern: '*/5 * * * *', // Every 5 minutes } } }; // Define a one-off task const oneOffTask = { path: 'tasks/single', run: async (ctx, job) => { console.log('Running one-off task:', job.id); } }; // Register jobs app.registerJob(cronJob); app.registerJob(oneOffTask); // Start processing in non-blocking way app.processJobs(); // Add a one-off task on demand await app.addJob('tasks/single', { data: 'some data' });
// Create independent workers const worker = queue.createWorker(handler, { concurrency: 5, pollIntervalMs: 1000, }); // Non-blocking event handling worker.addEventListener('complete', (event) => { console.log('Job completed:', event.detail); });
// Cron Job Definition interface CronJob { path: string; run: (ctx: any, job: any) => Promise<void>; options: { repeat: { pattern: string; // Cron pattern }; }; } // One-off Task Definition interface Task { path: string; run: (ctx: any, job: any) => Promise<void>; }
MIT
Add Package
deno add jsr:@leotermine/redismq
Import symbol
import * as redismq from "@leotermine/redismq";
---- OR ----
Import directly with a jsr specifier
import * as redismq from "jsr:@leotermine/redismq";
Add Package
npx jsr add @leotermine/redismq
Import symbol
import * as redismq from "@leotermine/redismq";
Add Package
yarn dlx jsr add @leotermine/redismq
Import symbol
import * as redismq from "@leotermine/redismq";
Add Package
pnpm dlx jsr add @leotermine/redismq
Import symbol
import * as redismq from "@leotermine/redismq";
Add Package
bunx jsr add @leotermine/redismq
Import symbol
import * as redismq from "@leotermine/redismq";