微服务框架
【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】
微服务保护
文章目录
- 微服务框架
- 微服务保护
- 32 隔离和降级
- 32.6 熔断策略【异常比例、异常数】
- 32.6.1 熔断策略【异常比例、异常数】
- 32.6.2 案例
- 32.6.3 总结
32 隔离和降级
32.6 熔断策略【异常比例、异常数】
32.6.1 熔断策略【异常比例、异常数】
断路器熔断策略有三种:慢调用、异常比例或异常数
- 异常比例或异常数:统计指定时间内的调用,如果调用次数超过指定请求数,并且出现异常的比例达到设定的比例阈值(或超过指定异常数),则触发熔断。例如:


解读:统计最近1000ms内的请求,如果请求量超过10次,并且异常比例不低于0.5,则触发熔断,熔断时长为5秒。然后进入half-open状态,放行一次请求做测试。
32.6.2 案例
【案例】熔断策略-异常比例
需求:给 UserClient的查询用户接口设置降级规则,统计时间为1秒,最小请求数量为5,失败阈值比例为0.4,熔断时长为5s
提示:为了触发异常统计,我们需要修改UserService中的业务,抛出异常:

修改controller 控制器
/**
* 路径: /user/110
*
* @param id 用户id
* @return 用户
*/
@GetMapping("/{id}")
public User queryById(@PathVariable("id") Long id,
@RequestHeader(value = "Truth", required = false) String truth) throws InterruptedException {
if (id == 1) {
//休眠,触发熔断
Thread.sleep(60);
} else if (id == 2) {
throw new RuntimeException("故意出错,触发熔断");
}
return userService.queryById(id);
}

OK。重启user 服务

先访问一下102

没问题,故意抛出了异常
打开sentinel 控制台

【异常比例】

直接新增

OK,现在就要模拟,1秒 请求5 次,异常比例0.4
先连续访问5 次102, 异常比例阈值达到,熔断,103 也不能正常访问

熔断前103 正常

OK,没毛病【快速失败】
32.6.3 总结
Sentinel熔断降级的策略有哪些?
- 慢调用比例:超过指定时长的调用为慢调用,统计单位时长内慢调用的比例,超过阈值则熔断
- 异常比例:统计单位时长内异常调用的比例,超过阈值则熔断
- 异常数:统计单位时长内异常调用的次数,超过阈值则熔断












![[附源码]Python计算机毕业设计大学生运动员健康管理系统Django(程序+LW)](https://img-blog.csdnimg.cn/b3e13cbd902145afbb0280da50f5c73a.png)

![[ Linux ] 可重入函数,volatile 关键字,SIGCHLD信号](https://img-blog.csdnimg.cn/img_convert/ad89bd16e3e842d3f6a733e9a18f88f5.png)



