🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] > [github](https://github.com/afex/hystrix-go) ## 概述 1. 集`流量控制`、`熔断`、`容错`等 2. 每一个 Command都会有一个默认统计控制器 3. 默认的统计控制器 DefaultMetricCollector 4. 保存熔断器的所有状态,调用次数,失败次数,被拒绝次数等信息 ### 熔断状态 1. CLOSED关闭状态:允许流量通过 2. OPEN打开状态:不允许流量通过,即处于降级状态,走降级逻辑。 3. HALF OPEN半开状态:允许某些流量通过,如果出现超时、异常等情况,将进入OPEN状态,如果成功,那么将进入 CLOSED状态。 ## 参数 ``` Timeout 执行command的超时时间。`默认时间是1000毫秒` MaxConcurrentRequests command的最大并发量`默认值是10` SleepWindow 当熔断器被打开后,SleepWindow的时间就是控制过多久后去尝试服务是否可用了。`默认值是5000毫秒` RequestVolumeThreshold 一个统计窗口10秒内请求数量。达到这个请求数量后才去判断是否要开启熔断。`默认值是20` ErrorPercentThreshold 错误百分比,请求数量大于等于RequestVolumeThreshold 并且错误率到达这个百分比后就会启动`熔断默认值是50` ``` ### 函数 ``` // 同步执行 err := hystrix.Do("my_command", func() error { // talk to other services return nil }, func(err error) error { // do this when services are down return nil }) //异步执行 output := make(chan bool, 1) errors := hystrix.Go("my_command", func() error { // talk to other services output <- true return nil }, nil) select { case out := <-output: // success case err := <-errors: // failure ```