上次我们分享了 Hystrix 具体流程,作为断路器实现,我们如何将 hystrix 用在我们的项目代码中呢?
我们可以简单的将 hystrix-go 下载下来
go get github.com/afex/hystrix-go/hystrix
代码会放到我们的 GOPATH 中,的 pkg 下面,例如我的 window 路径是这样的
go\pkg\mod\github.com\afex\hystrix-go@v0.0.0-20180502004556-fa1af6a1f4f5\hystrix
代码目录是酱紫的:
我们来看一下基本代码逻辑,屡一下:
初始化配置
hystrix.ConfigureCommand(CircuitBreakerName, hystrix.CommandConfig{
Timeout: 1000,
MaxConcurrentRequests: 5,
RequestVolumeThreshold: 3,
SleepWindow: 2000,
ErrorPercentThreshold: 20,
})
可以看到 \go\pkg\mod\github.com\afex\hystrix-go@v0.0.0-20180502004556-fa1af6a1f4f5\hystrix\settings.go
中会有这个结构体定义的默认值
解释一下上述默认值代表的意思
- Timeout
指的是,命令执行的超时时间
远程调用逻辑执行超过该时间将被强制执行超时,就进行失败回滚中 , 默认是 1000 毫秒
- MaxConcurrentRequests
最大并发请求数
表示每个 hystrix 命令最大执行的并发协程,用于进行流量控制和资源隔离
当同种的 hystrix 执行的并发数量超过了该值,请求将会直接进入到失败回滚逻辑中,并被标记为拒绝请求上报
- RequestVolumeThreshold
最小请求阈值
只有滑动窗口时间内的请求数量超过该值,断路器才会执行对应的判断逻辑
在低请求量的时候,断路器是不会发生效应的,即时这些请求全部失败,因为他只要没有超过这个值,就不会触发
- SleepWindow
超时窗口时间,指的是断路器打开 SleepWindow 时长后,进入半开状态
重新允许远程调用的发生,试探下游服务是否恢复正常
如果接下来的请求都是成功的,那么断路器会关闭,否则就会重新打开
- ErrorPercentThreshold
指的是,错误比例阈值
当滑动窗口时间内的