代码拉取完成,页面将自动刷新
package flow
import (
"fmt"
"github.com/sony/gobreaker/v2"
"time"
)
var BreakerHandler *gobreaker.CircuitBreaker[[]byte]
func init() {
// Settings
// Name:熔断器的名称。
// MaxRequests:当熔断器为半开状态时,允许通过的最大请求数。如果为0,则只允许1个请求通过。
// Interval:熔断器闭合状态的循环周期,用于清除内部计数。如果小于等于0,则在闭合状态下不清除内部计数。
// Timeout:熔断器打开状态的持续时间,之后会变为半开状态。如果小于等于0,则熔断器的超时时间设置为60秒。
// ReadyToTrip:当在闭合状态下请求失败时,调用该函数。如果返回true,则熔断器将进入打开状态。如果为nil,则使用默认的ReadyToTrip函数。默认函数在连续失败次数超过5次时返回true。
// OnStateChange:当熔断器的状态发生变化时调用该函数。
// IsSuccessful:用于判断请求的错误是否视为成功。如果返回true,则将错误计为成功;否则计为失败。如果为nil,则使用默认的IsSuccessful函数,该函数对于非nil的错误均返回false。
var st gobreaker.Settings
st.Name = "GatewayBreaker"
// 闭合状态每隔10秒会清除计数,意味着请求速度慢,可能ReadyToTrip函数会一直重新计算,即使报错也不会打开
//st.Interval = 10 * time.Second
st.Timeout = 10 * time.Second
// 请求数大于5次,且错误率大于80%
//st.ReadyToTrip = func(counts gobreaker.Counts) bool {
// failureRatio := float64(counts.TotalFailures) / float64(counts.Requests)
// return counts.Requests >= 5 && failureRatio >= 0.8
//}
st.OnStateChange = func(name string, from gobreaker.State, to gobreaker.State) {
fmt.Printf("断路器状态, name: %s from: %d to: %d \n", name, from, to)
}
BreakerHandler = gobreaker.NewCircuitBreaker[[]byte](st)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。