Sentinel限流熔断降级
0
我们需要区分这几个词:限流、熔断、降级
限流:某个服务资源的QPS
熔断:服务出现问题被禁用(超时、异常、调用时间过长)
降级:限流或者熔断后服务返回一个临时结果(活动火爆稍后重试)
限流和熔断都可以出现降级
主要区别fallback
和blockHandler
参数,如果没有配置blockHandler
,都会进入到fallback
,因为限流异常也属于异常。
还有就是两个方法的异常类型是不能修改的,如果需要全局处理可以定义异常处理ControllerAdvice
。
感觉对于微服务内部限流没啥太大必要,主要还是控制外部请求就可以了。
所以sentinel的dubbo适配和dashboard也没啥用,感觉只会增加系统负担。
当然个人理解,没有大型系统的经验,可能有点浅薄。有时候人总是想把握住太多,导致失去的更多。
@PostConstruct
public void init() {
List<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule();
rule.setResource("name");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(1);
rules.add(rule);
FlowRuleManager.loadRules(rules);
}
@GetMapping("/name")
@SentinelResource(value = "name", fallback = "nameFallback", blockHandler = "nameBlockHandler")
public String name() {
return this.userService.name();
}
/**
* 异常:异常类型可以没有不能修改
*/
public String nameFallback(Throwable e) {
return "fallback:" + e;
}
/**
* 限流:异常类型可以没有不能修改
* 如果没有配置blockHandler默认进入fallback
*/
public String nameBlockHandler(BlockException e) {
return "nameBlockHandler:" + e;
}
详细资料:https://sentinelguard.io/zh-cn/docs/annotation-support.html