Skip to content

CircuitBreaker

自 1.5.0 起

Circuit breaker pattern for protecting against cascading failures in distributed systems.

签名

typescript
type CircuitBreaker<T = unknown> = {
  execute: (fn: () => Promise<T>) => Promise<T>
  getState: () => CircuitBreakerState
  getStats: () => CircuitBreakerStats
  reset: () => void
  open: () => void
  close: () => void
}

参数

参数描述
TThe return type of the wrapped function

示例

基本用法

typescript
import type { CircuitBreaker } from 'uni-types'

const breaker: CircuitBreaker<string> = {
  execute: async (fn) => { return fn() },
  getState: () => 'closed',
  getStats: () => ({
    state: 'closed',
    failures: 0,
    successes: 42,
    rejects: 0,
    timeouts: 0
  }),
  reset: () => {},
  open: () => {},
  close: () => {}
}

const result = await breaker.execute(() => fetch('/api/data').then(r => r.text()))
console.log(breaker.getState()) // 'closed'

Monitoring State Changes

typescript
import type { CircuitBreaker, CircuitBreakerConfig, CircuitBreakerState } from 'uni-types'

const config: CircuitBreakerConfig = {
  failureThreshold: 5,
  successThreshold: 3,
  timeout: 3000,
  resetTimeout: 30000,
  onStateChange: (oldState: CircuitBreakerState, newState: CircuitBreakerState) => {
    console.log(`Circuit breaker: ${oldState} -> ${newState}`)
  }
}

const apiBreaker: CircuitBreaker = {
  execute: async (fn) => { return fn() },
  getState: () => 'half-open',
  getStats: () => ({
    state: 'half-open',
    failures: 5,
    successes: 1,
    rejects: 3,
    timeouts: 2,
    lastFailure: new Date(),
    lastSuccess: new Date()
  }),
  reset: () => {},
  open: () => {},
  close: () => {}
}

相关

基于 MIT 许可发布