跳转到内容

Circuit Breaker

createCircuitBreaker 实现了经典的三态熔断器模式:关闭(正常)→ 打开(熔断)→ 半开(试探)。

import { createCircuitBreaker } from "@ventostack/core";
const breaker = createCircuitBreaker({
failureThreshold: 5, // 连续失败 5 次后熔断
resetTimeout: 30000, // 熔断 30 秒后进入半开状态
halfOpenMax: 1, // 半开状态最多尝试 1 次
});
// 执行受保护的异步操作
try {
const data = await breaker.execute(() => fetch("https://api.example.com/data"));
} catch (err) {
if (err.name === "CircuitOpenError") {
console.log("熔断中,快速失败");
}
}
const breaker = createCircuitBreaker({
onStateChange(from, to) {
console.log(`熔断器状态变更: ${from}${to}`);
},
});
breaker.getState(); // "closed" | "open" | "half-open"
breaker.getStats();
// { state: "closed", failures: 2, successes: 10, lastFailure: 1715000000000 }
breaker.reset(); // 手动重置为关闭状态
当前状态触发条件转入状态
closed连续失败 ≥ failureThresholdopen
open经过 resetTimeout 毫秒half-open
half-open执行成功closed
half-open执行失败 或 尝试次数 ≥ halfOpenMaxopen
属性类型默认值说明
failureThresholdnumber5触发熔断的连续失败次数
resetTimeoutnumber30000熔断后等待多久进入半开状态(毫秒)
halfOpenMaxnumber1半开状态最大试探次数
onStateChange(from, to) => void状态变更回调
方法说明
execute(fn)执行受保护的异步函数
getState()获取当前状态
getStats()获取统计信息(state/failures/successes/lastFailure)
reset()手动重置熔断器