hystrix-go
最后更新于:2022-04-02 02:40:51
[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
```
';