import { Logger } from '@nestjs/common'; import { CircuitBreakerConfig } from '../interfaces/http-client-config.interface'; /** * Circuit Breaker 清理配置 */ interface CircuitBreakerCleanupConfig { /** 最大空闲时间(毫秒),超过此时间未使用的circuit breaker将被清理 */ maxIdleTimeMs: number; /** 清理间隔(毫秒),定期清理的时间间隔 */ cleanupIntervalMs: number; /** 最大circuit breaker数量,超过此数量时触发LRU清理 */ maxSize: number; } /** * 熔断器服务 * 基于Spring Cloud CircuitBreaker的设计理念 */ export declare class HttpCircuitBreakerService { private readonly logger; private readonly circuitBreakers; private cleanupTimer?; /** 默认清理配置 */ private readonly cleanupConfig; constructor(); onModuleDestroy(): void; /** * 获取或创建熔断器 */ getCircuitBreaker(key: string, config: CircuitBreakerConfig): CircuitBreaker; /** * 执行带熔断保护的请求 */ executeWithCircuitBreaker(key: string, requestFn: () => Promise, config: CircuitBreakerConfig, onStateChange?: (state: string) => void): Promise; /** * 获取熔断器当前状态 */ getCircuitBreakerState(key: string): string | undefined; /** * 重置所有熔断器 */ resetAll(): void; /** * 获取所有熔断器状态 */ getAllStates(): Record; /** * 获取Circuit Breaker统计信息 */ getStats(): { total: number; byState: Record; }; /** * 清理空闲的Circuit Breaker * 清理超过最大空闲时间的Circuit Breaker */ cleanupIdle(): number; /** * 手动触发清理(用于测试) */ manualCleanup(): number; /** * 设置清理配置 */ setCleanupConfig(config: Partial): void; /** * 获取清理配置 */ getCleanupConfig(): CircuitBreakerCleanupConfig; /** * 基于LRU策略清理Circuit Breaker * 删除最久未访问的Circuit Breaker直到数量降到maxSize以下 */ private cleanupLRU; /** * 启动定期清理任务 */ private startCleanupTask; } /** * 熔断器类 */ declare class CircuitBreaker { private readonly key; private readonly config; private readonly logger; private state; private failureCount; private successCount; private lastFailureTime; private nextAttemptTime; private requestCount; private windowStartTime; private onStateChange?; private lastAccessTime; constructor(key: string, config: CircuitBreakerConfig, logger: Logger); /** * 更新最后访问时间 */ updateLastAccessTime(): void; /** * 获取最后访问时间 */ getLastAccessTime(): number; /** * 执行请求 */ execute(requestFn: () => Promise, onStateChange?: (state: string) => void): Promise; /** * 重置熔断器 */ reset(): void; /** * 获取熔断器状态 */ getState(): any; /** * 处理成功请求 */ private onSuccess; /** * 处理失败请求 */ private onFailure; /** * 转换到关闭状态 */ private transitionToClosed; /** * 转换到开启状态 */ private transitionToOpen; /** * 转换到半开状态 */ private transitionToHalfOpen; /** * 通知状态变化 */ private notifyStateChange; /** * 重置监控窗口 */ private resetMonitoringWindow; } export {};