原理就是现场隔离,服务降级
为每个微服务提供线程池,当线程池中的线程不够用时候,默认不采用排队,加速判定失败时间,用户通过线程池中线程访问服务,如果线程池已经满了,或者请求超时,就会降级处理
服务降级发生情况:
线程已经满了,
请求超时(默认的请求超时时间是2s)
用户请求故障的时候,不会阻塞,更不会无休止的等待,至少可以看到一个可以执行的结果,
服务 的消费方引入依赖
启动类上加上@EnableCircuitBreaker注解,配置文件中加上@SpringCloudApplication=@EnableCircuitBreaker+@SpringBootApplication+@EnableDiscoveryClient
使用:
1、对应的@RequestMapping注解上加上:@HystrixCommand(fallbackMethods="回滚函数名字")注意函数返回springbootapplication值值和参数列表和原来函数必须一致
2、或者直接在controller类上面加上@DefaultProperties(defaultFallback=“方法”),因为统一的方法,所以参数列表不能再有值了,想要使用的时候对应的方法上加上@HystrixCommand
定义超时时长@HystrixCommand(commandProperties={@HystrixProperties(key="excution.isolation.thread.timeoutInMilliseconds",value=2000)})
或者pom文件中全局配置(这里的参数都能在源码包里找到)
hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 3000
default:可以是服务的名字或者方法,表示只对一个服务或者方法 配置
熔断:
状态机有三个状态:
closed:关闭状态,所有请求都正常访问
open状态:打开状态,所有请求都会被降级,Hystrix对请求情况统计,当一定时间请求的失败百分比达到阈值,熔断器就会打开,默认的比例是百分之五十,请求的次数不超过20
half open:半开状态,熔断器打开后悔进入休眠(默认是5s)时间结束后会放行一部分的请求,若请求健康正常,熔断器就会进入关闭状态,否则熔断器就会继续打开,这样往复执行循环
熔断器打开的时候,请求到达的时候直接回执行rollback方法