1、熔断(错误率)触发降级:
- 熔断一旦开启后,后续的请求将被转发到fallback方法,这一块底层原理采用Spring的AOP拦截
- 如何触发熔断?判断阈值
10秒内发起了至少circuitBreaker.requestVolumeThreshold 次数的请求,失败率超过circuitBreaker.errorThresholdPercentage,从熔断开启后,后续circuitBreaker.sleepWindowInMilliseconds之内的请求,都不会发起到远程服务端。
为啥是10秒,可以参考Hystrix的滑动窗口算法。
- 熔断会有个自动恢复。
例如下图的配置,表示以下熔断策略:
10秒内,5次请求,失败率在50%,熔断5秒。
@HystrixCommand( commandProperties = { //打开熔断开关 @HystrixProperty(name="circuitBreaker.enabled",value="true"), //最小的请求次数 @HystrixProperty(name="circuitBreaker.requestVolumeThreshold",value="5"), //熔断时间 @HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds",value="5000"), //失败百分比 @HystrixProperty(name="circuitBreaker.errorThresholdPercentage",value="50") }, fallbackMethod = "fallback")
- fallbackMethod规范,方法的参数,返回值需要与熔断方法一致。
@RestController
public class HystrixController {
@Autowired
RestTemplate restTemplate;
@GetMapping("/test")
public String getTest()
{
return "helloword";
}
@HystrixCommand(
commandProperties = {
//打开熔断开关
@HystrixProperty(name="circuitBreaker.ena