fuse

Fuse - Circuit breaker with half-open state, exponential backoff, and event hooks for MoonBit

circuit-breaker
resilience
fault-tolerance
microservices
moon add tuya-me/fuse@0.1.0
Download zip
Author
Version
0.1.0
License
Apache-2.0
Last updated
last month
Downloads
11
README

#Fuse v0.1.0

熔断器——三态状态机(Closed → Open → HalfOpen),支持半开探测 + 事件钩子 + Builder 模式。

适用于微服务调用保护、AI Agent 工具故障隔离、数据库连接池熔断等场景。

#安装

moon add fuse

#快速开始

let fuse = @fuse.new_builder()
.failure_threshold(5) // 连续 5 次失败 → 熔断
.cooldown_secs(30) // 30 秒冷却后进入半开
.half_open_limit(3) // 半开状态 3 次成功后恢复
.on_trip(fn(fails) { alert("CIRCUIT OPEN: " + fails.to_string()) })
.on_restore(fn() { alert("CIRCUIT CLOSED") })
.build()

match fuse.try_acquire() {
Ok(_) => {
// 获得许可,执行业务
if call_service() {
fuse.record_success()
} else {
fuse.record_failure()
}
}
Err(e) => println(e) // "FUSE OPEN: cooldown 25s remaining"
}

#状态转换

连续 N 次失败 冷却期满 Closed ──────────────► Open ─────────────► HalfOpen ▲ │ │ 半开成功 × M 次 │ └───────────────────────────────────────────┘ │ └── 半开失败 ──► Open(重新熔断)

#快捷预设

let dev = @fuse.permissive_fuse() // threshold=10 cooldown=10s half_open=1
let prod = @fuse.default_fuse() // threshold=5 cooldown=30s half_open=3
let strict = @fuse.strict_fuse() // threshold=2 cooldown=60s half_open=5

#API 参考

方法说明
new_builder()创建 Builder
.failure_threshold(n)连续失败 N 次熔断
.cooldown_secs(n)熔断后冷却 tick 数
.half_open_limit(n)半开恢复所需成功次数
.on_trip(fn)熔断触发回调
.on_restore(fn)恢复回调
.on_half_open(fn)进入半开回调
.build()构建 Fuse
fuse.try_acquire()获取许可 → Ok / Err
fuse.record_success()上报成功
fuse.record_failure()上报失败
fuse.tick()手动推进时间
fuse.current_state()当前状态(Closed/Open/HalfOpen)
fuse.is_open()是否熔断中
fuse.stats()统计字符串

#相关文档

#许可证

Apache-2.0 © AegisRun Authors