export interface EventDeliveryRetry { event: TEvent; error: unknown; /** 当前事件已经失败的次数,从 1 开始。 */ attempt: number; delayMs: number; /** 包含当前事件在内、仍等待成功投递的事件数。 */ pending: number; } export interface OrderedEventDeliveryQueueOptions { dispatch(event: TEvent, signal: AbortSignal): void | PromiseLike; retryDelaysMs?: readonly number[]; backlogWarningThreshold?: number; onRetry?(retry: EventDeliveryRetry): void; onBacklog?(pending: number): void; /** 仅用于替换计时机制;实现必须在 signal 中止后尽快结束。 */ sleep?(delayMs: number, signal: AbortSignal): Promise; } /** * 将无法提供异步背压的事件源闭合为有序、可重试的业务投递链。 * * 队列不设置会丢事件的硬上限:上游若已经在业务确认前提交游标,溢出时断线或丢弃 * 都无法恢复。调用方应通过 `onBacklog` 观测积压,并在源头降低事件速率。 * `stop()` 会取消当前代次的重试等待并以 `false` 结束尚未交付的 enqueue Promise; * 新代次不需要等待旧代次中无法取消的业务 Promise。 */ export declare class OrderedEventDeliveryQueue { private readonly options; private readonly retryDelaysMs; private readonly backlogWarningThreshold; private readonly sleep; private generationId; private generation?; constructor(options: OrderedEventDeliveryQueueOptions); get pending(): number; /** 开始一个独立投递代次;重复调用不会重置正在工作的代次。 */ start(): void; /** * 停止当前代次。返回 `false` 的事件没有完成业务投递,调用方不得据此提交上游 ACK。 */ stop(): void; /** 按入队顺序交付事件;成功返回 true,代次停止或尚未启动时返回 false。 */ enqueue(event: TEvent): Promise; private startDrain; private drainGeneration; private deliverEntry; private reportBacklog; private compact; private isCurrent; }