Hystrix
断路器,实现快速失败,提供了很多失败策略,来防止雪崩,并且提供了监控
1.断路器注解
这里在启动类加@EnableCircuitBreaker或者@EnableHystrix都可以
2.@HystrixCommand
其是作用在consumer上的,在你的调用provider的controller方法上加上该注解
@HystrixCommand(fallbackMethod="funcXXX")
自己写一个funcXXX,返回一个错误的跟provider返回的同类型对象
这样当provider挂了以后,就可以立马返回一个错误对象,不用等待了。
关于@HystrixCommand有一些属性,可以查阅文档进行设置
3.Throwable
关键概念,如果我们的fallback方法执行了,这并不意味着断路器已经打开,这个概念已经要明确,我们需要知道进入到fallback方法的原因,这个时候在我们的fallback方法里面加一个入参Throwable
如果抛了异常,但是我们不想执行fallback方法,一些处理办法,这里不说,需要时查文档
4.深入理解断路器
我们先使用Actuator来检测端点健康状态,/health可以查看,我们的consumer的断路器的情况,我们发现,当关掉provider的时候,断路器依然是UP状态,说明断路器并没有开启,原因就是我们的失败率没有达到阈值(5s内20次请求失败),最后强调一遍,执行了fallback并不意味着断路器开启了,请求超时、失败、被拒绝、断路器开启,都会执行fallback;
如果断路器开启,那么检测到的status:CIRCUIT_OPEN,这样就不会再去请求该provider服务了
5.Feign整合Hystrix
我们使用Feign是使用了其接口,没有方法体,所以我们之前的@HystrixCommand在这里不适用;
如何使用Feign的Hystrix呢?实际上,springcloud已经帮我们整合了Hystrix和Feign
如果想让Feign打开Hystrix支持,在配置文件设置
feign.hystrix.enable=true
我们在@FeignClient后面加一个属性:fallback="FeignClientFallback.class",然后让这个类也实现UserFeignClient接口,重写其方法即可
6.Feign获取异常信息
这个时候要在@FeignClient的一个fallbackFactroy属性上写一个自定义的类,然后要实现FallbackFactory接口,并且重写一个叫做create的方法,,把日志方法写在fallback方法里面;
同样我们可以根绝不同的Throwable返回不同的错误值
7.禁用Hystrix
需要时看文档,默认是禁止的
8.Hystrix监控
我们使用Actuator监控Hystrix暴露给外的数据来进行监控
我们使用/hystrix.stream就可以查看,前提是加了@HystrixCommand的方法被执行过
9.Hystrix Dashboard可视化监控
Hystrix Dashboard是一个独立的Server
依赖一个hysrix-dashboard的包,配置一个8030端口的server,我们启动项目以后就可以进入这个server,一个可视化界面
我们在url输入刚刚开启的服务端点8010/hystrix.stream
就会生成一个图形化的界面,里面显示了被@HystrixCommand注解的这个方法的各种指标
10.Turbine聚合监控数据
可以将所有的相关的/hystrix.stream端点的数据全部聚合到一个组合的/turbine.stream里面
我们专门写一个springboot项目,添加turbine的依赖,然后启动:
EurekaServer
consumer1
consumer2
provider
hystrix-dashboard
turbine
我们在hystrix-dashboard里面输入turbin的地址,就可以看到一个聚合监控页面
11.mq获取stream
如果我们的turbine无法获取到所有的hystrix-stream,我们可以采用消息中间件的方式拿,具体到时候看文档,有整合包