hystrix 当某个服务单元发生故障(类似用电器发生短路)之后,通过熔断器的故障监控(类似熔断保险丝),直接切断原来的主逻辑调用,可实现服务降级(服务容错保护),线程隔离,熔断器等功能。
服务降级(服务容错保护)与线程隔离是绑在一起的,当调用服务超时时,会触发服务降级;而让熔断器发挥作用则需满足以下三个参数之一:是否强制开启熔断、请求总数下限、错误百分比下限。
熔断器未打开之前,对于工程中示例的情况就是每个请求都会在当hystrix超时之后返回fallback,每个请求时间延迟就是近似hystrix的超时时间,如果设置为5秒,那么每个请求就都要延迟5秒才会返回。
当熔断器在10秒内发现请求总数超过20,并且错误百分比超过50%,这个时候熔断器打开。打开之后,再有请求调用的时候,将不会调用主逻辑,而是直接调用降级逻辑,这个时候就不会等待5秒之后才返回fallback。
通过熔断器,实现了自动地发现错误并将降级逻辑切换为主逻辑,减少响应延迟的效果。
在熔断器打开之后,处理逻辑并没有结束,我们的降级逻辑已经被成了主逻辑,那么原来的主逻辑要如何恢复呢?
对于这一问题,hystrix也为我们实现了自动恢复功能。当熔断器打开,对主逻辑进行熔断之后,hystrix会启动一个休眠时间窗,在这个时间窗内,降级逻辑是临时的成为主逻辑,当休眠时间窗到期,熔断器将进入半开状态,释放一次请求到原来的主逻辑上,如果此次请求正常返回,那么断路器将继续闭合,主逻辑恢复,如果这次请求依然有问题,熔断器继续进入打开状态,休眠时间窗重新计时。
注意点:hystrix函数必须为public,fallback函数可以为private。两者需要返回值类型和参数相同。
由于Hystrix已经停止开发,官方推荐替代项目为Resilience4j,另外也可以用阿里巴巴的sentinel(这两个后面会研究)。
这里会在前面两篇ribbon-conusmer以及feign-consumer工程的基础上改造,对Ribbon+Hystrix与Feign+Hystrix的使用进行介绍使用。
(一)对ribbon-conusmer工程引入Hystrix
使用Hystrix时,需要引入以下依赖,由于父pom.xml中已经依赖了,所以这里子pom.xml不需再引入。
<!--断路器-->