UNPKG

peanar

Version:

A job queue for Node.js based on RabbitMQ

127 lines (126 loc) 4.76 kB
import Broker from './amqplib_compat/broker'; import Worker, { IWorkerResult } from './worker'; import PeanarJob from './job'; import { IConnectionParams } from 'ts-amqp/dist/interfaces/Connection'; import { Writable } from 'stream'; import Registry from './registry'; import PeanarTransactor from './transact'; import Consumer from './amqplib_compat/consumer'; import { Channel } from 'amqplib'; export interface IPeanarJobDefinitionInput { queue: string; name?: string; routingKey?: string; exchange?: string; replyTo?: string; handler: (...args: any[]) => Promise<any>; jobClass?: typeof PeanarJob; expires?: number; retry_exchange?: string; error_exchange?: string; max_retries?: number; retry_delay?: number; delayed_run_wait?: number; max_priority?: number; default_priority?: number; } export interface IPeanarJobDefinition { name: string; queue: string; handler: (...args: any[]) => Promise<any>; routingKey: string; exchange?: string; replyTo?: string; jobClass?: typeof PeanarJob; expires?: number; retry_exchange?: string; error_exchange?: string; max_retries?: number; retry_delay?: number; delayed_run_wait?: number; max_priority?: number; default_priority?: number; } export interface IPeanarRequest { id: string; name: string; args: any[]; attempt: number; correlationId?: string; deliveryTag?: bigint; priority?: number; } export interface IPeanarJob extends IPeanarJobDefinition, IPeanarRequest { deliveryTag: bigint; } export interface IPeanarResponse { id: string; name: string; status: 'SUCCESS' | 'FAILURE'; error?: unknown; result?: unknown; } export interface IPeanarOptions { connection?: IConnectionParams; poolSize?: number; prefetch?: number; jobClass?: typeof PeanarJob; logger?(...args: any[]): any; } interface IWorkerOptions { queues?: string[]; concurrency?: number; prefetch?: number; outputWritable?: Writable; logger?: (msg: string) => void; } export declare enum EAppState { RUNNING = "RUNNING", CLOSING = "CLOSING", CLOSED = "CLOSED" } export default class PeanarApp { registry: Registry; log: (...args: any[]) => any; broker: Broker; jobClass: typeof PeanarJob; protected consumers: Map<string, Consumer[]>; protected workers: Map<string, Worker[]>; protected jobs: Map<string, (...args: unknown[]) => Promise<unknown>>; protected transactions: Set<PeanarTransactor>; state: EAppState; constructor(options?: IPeanarOptions); protected _shutdown(timeout?: number): Promise<void>; shutdown(timeout?: number): Promise<void>; protected _registerWorker(queue: string, worker: Worker): void; protected _registerConsumer(queue: string, consumer: Consumer): void; call(name: string, args: unknown[]): Promise<unknown>; protected _publish(routing_key: string, exchange: string | undefined, def: IPeanarJobDefinition, req: IPeanarRequest): Promise<string>; enqueueJobRequest(def: IPeanarJobDefinition, req: IPeanarRequest): Promise<string>; protected _enqueueJobResponse(job: PeanarJob, result: IWorkerResult): Promise<void>; protected _prepareJobRequest(name: string, args: any[]): IPeanarRequest; protected _prepareJobResponse(job: PeanarJob, result: IWorkerResult): IPeanarResponse; protected _createTransactor(def: IPeanarJobDefinition): () => PeanarTransactor; protected _createDelayedEnqueuer(def: IPeanarJobDefinition): (...args: unknown[]) => Promise<string>; protected _createEnqueuerWithPriority(def: IPeanarJobDefinition): (priority: number, ...args: unknown[]) => Promise<string>; protected _createEnqueuer(def: IPeanarJobDefinition): { (...args: unknown[]): Promise<string>; rpc(...args: unknown[]): Promise<void>; delayed: (...args: unknown[]) => Promise<string>; transaction: () => PeanarTransactor; withPriority: (priority: number, ...args: unknown[]) => Promise<string>; }; job(def: IPeanarJobDefinitionInput): { (...args: unknown[]): Promise<string>; rpc(...args: unknown[]): Promise<void>; delayed: (...args: unknown[]) => Promise<string>; transaction: () => PeanarTransactor; withPriority: (priority: number, ...args: unknown[]) => Promise<string>; }; declareAmqResources(): Promise<void>; pauseQueue(queue: string): void; resumeQueue(queue: string): void; protected _startWorker(queue: string, channel: Channel, consumer: Consumer, options?: Omit<IWorkerOptions, 'queues' | 'concurrency'>): Promise<Writable>; worker(options: IWorkerOptions): Promise<Writable[]>; } export {};