3 Star 12 Fork 3

os-lee/easy-paas

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
req_breaker.go 1.86 KB
一键复制 编辑 原始数据 按行查看 历史
lee 提交于 2024-07-09 19:23 +08:00 . 使用gobreaker支持服务熔断功能
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)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/os-lee/easy-paas.git
git@gitee.com:os-lee/easy-paas.git
os-lee
easy-paas
easy-paas
6cf1638f64c0

搜索帮助