原理就是现场隔离, 服务降级
为每个微服务提供线程池, 当线程池中的线程不够用时候, 默认不采用排队, 加速判定失败时间, 用户通过线程池中线程访问服务, 如果线程池已经满了, 或者请求超时, 就会降级处理
服务降级发生情况:
线程已经满了,
请求超时(默认的请求超时时间是 2s)
用户请求故障的时候, 不会阻塞, 更不会无休止的等待, 至少可以看到一个可以执行的结果,
服务 的消费方引入依赖
启动类上加上 @EnableCircuitBreaker 注解, 配置文件中加上 @[email protected][email protected][email protected]
使用:
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 方法
来源: http://www.bubuko.com/infodetail-3055822.html