///
import EventEmitter from 'events';
import { Stream } from '../../Stream';
export interface ISimpleEventEmitterQueueConstructorOptions {
name: string;
eventId: string;
callback: (_event: T) => any;
context: any;
maxObjectsInQueueForLockStream: number;
stream: Stream;
eventEmitter: EventEmitter;
queryQueuePeriodMillis?: number;
logger?: {
info: (_msg: string) => void;
error: (_msg: string | Error) => void;
};
}
/**
* Реализует СТРОГУЮ последовательность обработки событий, требующих заметного времени выполнения.
* На время выполнения может быть заблокирован поток-поставщик событий (stream),
* если в буфере накопится более заданного количества.
*
* Это - альтернатива обработке событий по сигналу из шины данных.
* Т.к. обработка "предыдущего" события может затянуться (н-р, требуется обогащение персоны),
* и обработка "последующего" события может завершиться раньше. А это не всегда то, что нужно.
* Пример:
* Цепочка событий: "смена номера тел" -> "начало вывода средств" -> "продолжение вывода средств".
* Начинаем отслеживать события только со смены номера.
* Если эти первые 2 события расположены близко, случается, что и-за необходимости обогатить 2 персоны для первого события,
* второе "добегает" до момента принятия решения об отслеживании раньше. И выпадает.
*/
export declare class SimpleEventEmitterAsyncQueue {
options: ISimpleEventEmitterQueueConstructorOptions;
queue: T[];
locked: number;
private readonly onEventCallBack;
constructor(options: ISimpleEventEmitterQueueConstructorOptions);
onEvent(event: T): void;
add2Queue(event: T): void;
processQueue(): Promise;
isLocked(): number;
destroy(): void;
}
//# sourceMappingURL=SimpleEventEmitterAsyncQueue.d.ts.map