雪崩利器 hystrix-go 源码分析
阅读源码的过程,就像是在像武侠小说里阅读武功秘籍一样,分析高手的一招一式,提炼出精髓,来增强自己的内力。 之前的帖子说了一下 微服务的雪崩效应和常见的解决方案 ,太水,没有上代码怎么叫解决方案。 github 上有很多开源的库来解决 雪崩问题 ,比较出名的是 Netflix 的开源库 hystrix 。集 流量控制 、 熔断 、 容错 等于一身的 java 语言的库。今天分析的源码库是 hystrix-go ,他是 hystrix 的的 go 语言版,应该是说简化版本,用很少的代码量实现了主要功能。很推荐朋友们有时间读一读。 使用简单 hystrix 的使用是非常简单的,同步执行,直接调用 Do 方法。 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 }) 异步执行 Go 方法,内部实现是启动了一个 gorouting ,如果想得到自定义方法的数据,需要你传 channel 来处理数据,或者输出。返回的 error 也是一个 channel output := make( chan bool, 1) errors :