断路器背景
微服务连锁故障场景
类型数量结构{ 请求uint32//请求数 TotalSuccesses uint32//成功 TotalFailures uint32//失败 ConsecutiveSuccesses uint32//连续成功 ConsecutiveFailures uint32//连续失败 }代码>
计数器完成对应请求状态的次数,为后续状态转移提供数据,计数提供了onRequest,调用onSuccess, onFailure,明确几个辅助接口用于实现对应请求状态的操作,感兴趣可以看下
状态机——断路器
<代码类=" language-go ">类型断路器结构{ 名称字符串//maxRequests限制半开状态下最大的请求数,避免海量请求将在恢复过程中的服务再次失败 maxRequests uint32//间隔用于在封闭状态下,断路器多久清除一次重要的信息,如果设置为0则在封闭状态下不会清除 间隔time.Duration//超时进入开放状态下,多长时间切换到半开状态,默认60年代 超时time.Duration//readyToTrip熔断条件,当执行失败后,会根据readyToTrip决定是否进入开放状态 bool readyToTrip func(项数)//> func (cb *断路器)执行(点播func()(接口{},错误))(接口{},错误){//执行请求钩子,会根据当前状态,来返回当前的一代和犯错(如果位于开放和半开的则不为零),通过犯错来进行判断是否直接返回 一代,犯错:=cb.beforeRequest () 如果犯错!=nil { 返回nil,犯错 }//捕获恐慌,避免应用函数错误造成断路器恐慌 推迟func () { 艾凡:=恢复() 如果e !=nil { cb。假afterRequest(代) 恐慌(e) } } ()//执行请求 因此,犯错:=要求()//根据结果来进行对应状态的统计,同时传递一代 cb。afterRequest(代,呃==nil) 返回结果,犯错 }微服务的断路器实现图解Golang通用实现