UNPKG

mq-flow

Version:

A lightweight, simple queue system designed for small tasks that need to be executed in a queued manner

134 lines (100 loc) 3.49 kB
# Queue System A lightweight, simple queue system designed for small tasks that need to be executed in a queued manner. This system is **not a full-fledged message queue like BullMQ, RabbitMQ, or similar systems**, but it offers an efficient solution for handling tasks with minimal setup. It's ideal for projects where simplicity and low overhead are preferred. This queue system works seamlessly with both JavaScript and TypeScript projects, providing type definitions for TypeScript while remaining fully compatible with JavaScript This queue system is best suited for: - **Small applications** that need to process tasks in sequence. - **Microservices** where lightweight task handling is sufficient. - **Jobs that require low overhead** and don’t need to interact with external systems like Redis or RabbitMQ. - **Development and prototyping** where simplicity is key. ## Features - **Push tasks**: Add new tasks to the queue. - **Pop tasks**: Remove tasks from the queue. - **Remove tasks**: Remove specific tasks from the queue. - **Priority handling**: Support for high and low-priority tasks. - **Asynchronous execution**: Tasks are executed asynchronously. - **Current process tracking**: Track the process currently being executed. - **Event-driven**: Emits events upon task completion with results. ## Installation Install the package using npm: ```javascript npm install mq-flow ``` To use this queue system, first import and initialize it ```javascript import { Queue } from 'mq-flow'; const queue = new Queue(); ``` You can push a task to the queue. Optionally, you can specify the task's priority and ID ```javascript //To add new task to Queue queue.mqPush( () =>{ return new Promise((resolve, reject) => { resolve('task-1'); }) }, { Priority: 1, ProcessId: 'task-1' }); queue.mqPush( () =>{ return new Promise((resolve, reject) => { resolve('task-2'); }) }, { Priority: 1, ProcessId: 'task-2' }); ``` You can pop the last task added to the queue ```javascript const popResult = queue.mqPop(); console.log(popResult); ``` To remove a specific task by its process ID ```javascript const popResult = queue.mqRemove('task-1'); console.log(popResult); ``` To start processing the tasks in the queue: ```javascript queue.mqStart(); ``` You can retrieve the ID of the currently running process ```javascript const currentProcessId = queue.getCurrentProcessId(); console.log(currentProcessId); ``` To check how many tasks are in the queue ```javascript const queueLength = queue.getQueueLength(); console.log(queueLength); ``` You can listen for task results using the `getResult` event ```javascript queue.on('getResult', (result) => { console.log('Task Result:', result); }); ``` ### Types You can define options and process types based on your requirements. The types used in the queue system are: ```Typescript type Process = { CallableFunction: () => Promise<any>; ProcessId?: string | number; } type PushPopReturnType = { ProcessId?: string | number; QueueLength: number; } type Result = { value: any, processId: string | number, queueLength: number, } type Options = { Priority? : number | Priority, ProcessId?: string | number, } ``` ### Enums ```javascript export enum ProcessState { UNDER_EXECUTION, IDLE }; ```