微服务-hystrix熔断器
这里的熔断器与我们家庭生活中使用的保险丝差不多
保险丝是通过牺牲自己保护家庭电路
熔断器为了避免多个服务中的一个服务出现异常,而连带其余服务出现异常的情况而出现的。采用与保险丝类似的机制,但比保险丝要强
主页:https://github.com/Netflix/Hystrix/
工作机制
正常工作的情况下,客户端请求调用服务API接口:
当有服务出现异常时,直接进行失败回滚,服务降级处理:
当服务繁忙时,如果服务出现异常,不是粗暴的直接报错,而是返回一个友好的提示,虽然拒绝了用户的访问,但是会返回一个结果。
这就好比去买鱼,平常超市买鱼会额外赠送杀鱼的服务。等到逢年过节,超市繁忙时,可能就不提供杀鱼服务了,这就是服务的降级。
系统特别繁忙时,一些次要服务暂时中断,优先保证主要服务的畅通,一切资源优先让给主要服务来使用,在双十一、618时,京东天猫都会采用这样的策略。
结论:Hystrix熔断器,避免某个小服务宕机,导致整个系统级联宕机,从而导致整个系统挂了,可以有效保护其他服务正常提供服务
项目中使用
导入依赖
1 | <dependency> |
开启熔断功能
千万注意在消费端开启,我们熔断相当于消费端的自我保护行为
加入节目效果
让服务端随机睡眠一阵,因为熔断机制决定了,触发时间是1秒
在service段增加一行代码:
意为随机睡眠 1 - 2 s
熔断使用
将需要进行熔断的服务上添加 @HystrixCommand(fallbackMethod = “异常时执行方法名”),熔断的触发时间默认为1s,当我们的请求时间超过了1s,就会执行熔断中指定的方法,但是要求两个方法的参数、返回值,必须相同
消费端中添加
运行效果
至此,结束
注意
昨天我们曾经定义过重试机制,只要又请求超时了,就会重试,问题:
如果重试时间与熔断时间冲突怎么办?
熔断会先执行,重试机制名存实亡。
解决方式是调大熔断时间:
1 | 50 = |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ls!
评论