@cortexql/queue
Version:
An extension for Queue implementation on CortexQL based on Bull Queue
59 lines (58 loc) • 2.97 kB
TypeScript
import * as Bull from 'bull';
import { BaseContext, ContextParams, IDebugger } from '@cortexql/core';
export declare type ContextParamsHandler<A extends {}, T extends any = any, P extends any = any> = ContextParams | ((job: Job<A, T, P>) => ContextParams);
export interface QueueOptions extends Bull.QueueOptions {
serializer?: {
parse: (value: string) => any;
stringify: (value: any) => string;
};
}
export interface Job<A extends {}, T extends any = any, P extends any = any> {
id: string | number;
data: A;
progress(value: P): Promise<void>;
update(data: A): Promise<void>;
getState(): Promise<Bull.JobStatus | 'stuck'>;
remove(): Promise<void>;
retry(): Promise<void>;
finished(): Promise<T>;
promote(): Promise<void>;
}
export declare type ProcessHandler<A extends {}, T extends any = any, C extends BaseContext = BaseContext, P extends any = any> = (job: Job<A, T, P>, context: C, client: QueueWorkerClient<A, T, C, P>) => Promise<T>;
export declare class QueueClient<A extends {}, T extends any = any, C extends BaseContext = BaseContext, P extends any = any> {
protected queue: Queue<A, T, C, P>;
protected bullQueue: Bull.Queue;
constructor(queue: Queue<A, T, C, P>);
/**
* Returns a promise that resolves when Redis is connected and the queue is ready to accept jobs.
* This replaces the `ready` event emitted on Queue in previous verisons.
*/
isReady(): Promise<this>;
get(id: string | number): Promise<Job<A, T, P>>;
dispatch(name: string | number, data: A, options?: Bull.JobOptions): Promise<Job<A, T, P>>;
dispatch(data: A, options?: Bull.JobOptions): Promise<Job<A, T, P>>;
isWorker(): boolean;
close(): Promise<void>;
}
export declare class QueueWorkerClient<A extends {}, T extends any = any, C extends BaseContext = BaseContext, P extends any = any> extends QueueClient<A, T, C, P> {
protected queue: Queue<A, T, C, P>;
constructor(queue: Queue<A, T, C, P>, concurrency?: number);
isWorker(): boolean;
}
export declare class Queue<A extends {} = any, T extends any = any, C extends BaseContext = BaseContext, P extends any = any> {
name: string;
options: QueueOptions | undefined;
constructor(name: string, options?: QueueOptions | undefined);
protected contextParamsHandler: ContextParamsHandler<A>;
contextParams(handler: ContextParamsHandler<A>): void;
getContextParams(job: Job<A, T, P>): ContextParams;
createContext(job: Job<A, T, P>): Promise<C>;
protected handler: ProcessHandler<A, T, C, P>;
process(handler: ProcessHandler<A, T, C, P>): void;
worker(concurrency?: number): Promise<QueueClient<A, T, C, P>>;
createClient(): QueueClient<A, T, C, P>;
debug: IDebugger;
subscribe(): Promise<QueueClient<A, T, C, P>>;
start(concurrency?: number, workers?: number): void;
}
export declare function getWorkerQueues(): QueueWorkerClient<any, any, BaseContext, any>[];