nodejs-cloud-taskmq
Version:
Node.js TypeScript library for integrating Google Cloud Tasks with MongoDB/Redis/Memory/Custom for a BullMQ-like queue system. Compatible with NestJS but framework-agnostic.
81 lines (80 loc) • 2.24 kB
TypeScript
import { EventEmitter } from 'events';
import { IStateStorageAdapter } from '../interfaces/storage-adapter.interface';
import { CloudTaskMQConfig } from '../interfaces/config.interface';
import { TaskProgress } from '../interfaces/task.interface';
import { ProcessorOptions } from '../decorators/processor.decorator';
import { EventHandlerMetadata } from '../decorators/events.decorator';
import 'reflect-metadata';
/**
* Processor registration information
*/
export interface ProcessorRegistration {
instance: any;
queueName: string;
options: ProcessorOptions;
processHandlers: Array<{
methodName: string;
name: string;
concurrency?: number;
handler: Function;
}>;
eventHandlers: EventHandlerMetadata[];
}
/**
* Consumer service for processing tasks
*/
export declare class ConsumerService extends EventEmitter {
private readonly config;
private readonly storageAdapter;
private processors;
private activeProcessors;
constructor(config: CloudTaskMQConfig, storageAdapter: IStateStorageAdapter);
/**
* Initialize the consumer service
*/
initialize(): Promise<void>;
/**
* Register a processor instance
*/
registerProcessor(instance: any): void;
/**
* Process a task received from Cloud Tasks
*/
processTask(payload: {
taskId: string;
queueName: string;
data: any;
attempts: number;
maxAttempts: number;
chain?: {
id: string;
index: number;
total: number;
};
uniquenessKey?: string;
}): Promise<any>;
/**
* Update task progress
*/
updateTaskProgress(taskId: string, progress: TaskProgress): Promise<void>;
/**
* Get registered processors
*/
getProcessors(): Map<string, ProcessorRegistration[]>;
/**
* Execute task processing using registered processors
*/
private executeTaskProcessing;
/**
* Emit task events to registered event handlers
*/
private emitTaskEvent;
/**
* Process next task in chain
*/
private processNextInChain;
/**
* Close the consumer service
*/
close(): Promise<void>;
}