Documentation
¶
Overview ¶
Package breaker 熔断器(closed → open → half-open → closed/reopen)。 零外部依赖,纯并发安全的状态机。
Index ¶
- Constants
- type Breaker
- func (b *Breaker) Abandon()
- func (b *Breaker) AbandonGen(gen uint64)
- func (b *Breaker) Allow(now time.Time) bool
- func (b *Breaker) AllowGen(now time.Time) (bool, uint64)
- func (b *Breaker) Failure(now time.Time)
- func (b *Breaker) FailureGen(now time.Time, gen uint64)
- func (b *Breaker) Opened(now time.Time) bool
- func (b *Breaker) Success()
- func (b *Breaker) SuccessGen(gen uint64)
- func (b *Breaker) WithProbeTimeout(d time.Duration) *Breaker
- type Breakers
- func (bs *Breakers) Abandon(name string)
- func (bs *Breakers) AbandonGen(name string, gen uint64)
- func (bs *Breakers) Allow(name string) bool
- func (bs *Breakers) AllowGen(name string) (bool, uint64)
- func (bs *Breakers) Failure(name string)
- func (bs *Breakers) FailureGen(name string, gen uint64)
- func (bs *Breakers) Opened(name string) bool
- func (bs *Breakers) Success(name string)
- func (bs *Breakers) SuccessGen(name string, gen uint64)
- type Option
Constants ¶
const ( DefaultTripThreshold = 3 DefaultCooldown = 5 * time.Minute // DefaultProbeTimeout 半开探测的缺省时限:探测方"失联"(Allow 放行后未配对 // Success/Failure,如调用方在探测期间 ctx 取消提前返回)超过此时限后, // Allow 放行新的探测,避免熔断器被陈旧探测永久卡死在半开。 DefaultProbeTimeout = time.Minute )
默认参数。
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Breaker ¶
type Breaker struct {
// contains filtered or unexported fields
}
Breaker 单 key 熔断器。
func (*Breaker) Abandon ¶
func (b *Breaker) Abandon()
Abandon 放弃在途的半开探测:Allow==true 但调用方在取得结果前终止(任务级 取消/优雅停机)——结果未知,既非成功也非失败,不计入统计。半开态回到 "可立即放行新探测"(不必等 probeTimeout 失联超时);closed 态无副作用。 与 Success/Failure 共同构成 Allow 的配对契约(v0.10.4)。
func (*Breaker) AbandonGen ¶
AbandonGen Abandon 的世代形态:gen 不匹配时忽略(旧探测已失联,无占位可解)。
func (*Breaker) Allow ¶
Allow 返回是否放行;半开时仅放行一个探测请求。 调用契约:返回 true 后必须恰好配对一次 Success、Failure 或 Abandon(探测 失联超过 DefaultProbeTimeout 后本方法会放行新探测,不再无限等待旧探测)。
func (*Breaker) AllowGen ¶
AllowGen Allow 的世代形态:放行探测时返回递增 gen,供 SuccessGen/FailureGen/ AbandonGen 携带上报——陈旧 gen(超时兜底已放行新探测后旧探测迟到上报)被 显式忽略,不再依赖时间窗甄别(v0.12.4 世代化;gen==0 表示 closed 态直行, 旧三方法仍可用)。
func (*Breaker) Failure ¶
Failure 记录一次真实发起且失败的调用;达阈值开熔断,半开探测失败重新熔断。 配对契约:仅对 Allow==true 放行过的调用上报(被拒调用从未发起,上报 Failure 会被当作探测失败而重新熔断);结果未知(取消/放弃)上报 Abandon。 熔断 open 期间被拒请求记录的 Failure 不续期冷却(否则高流量下 openUntil 被 无限顺延,永远进不了半开)。
func (*Breaker) FailureGen ¶
FailureGen Failure 的世代形态:gen 与当前探测不匹配(陈旧迟到上报)时 **完全忽略**——旧探测已被失联宣告,其结果对新窗口无意义(重熔会振荡, 计数会污染;迟到甄别的结构性解,替代时间窗缓冲启发)。
func (*Breaker) SuccessGen ¶
SuccessGen Success 的世代形态:gen 与当前探测不匹配(陈旧迟到上报)时忽略。
type Breakers ¶
type Breakers struct {
// Now 时钟源(测试注入用;仅启动期可写,运行期并发改写有数据竞争)。
Now func() time.Time
// contains filtered or unexported fields
}
Breakers 按 key 索引的熔断板(并发安全)。
func NewBreakers ¶
NewBreakers 创建熔断板。opts 可选(零值 = 全部采用缺省,既有调用方不受影响)。
func (*Breakers) AbandonGen ¶
func (*Breakers) AllowGen ¶
AllowGen/SuccessGen/FailureGen/AbandonGen 世代形态(Breaker 同名方法的 多路转发——调用方持有 gen 跨请求上报)。
func (*Breakers) FailureGen ¶
func (*Breakers) Opened ¶
Opened 按 key 判定是否熔断中。只读——未登记的 key 返回 false,不为查询 创建状态条目(监控轮询不该撑大内部 map;Allow/Success/Failure 才是登记时机)。