熔断功能紧接上一篇限流功能:
https://blog.youkuaiyun.com/zero_no1/article/details/104050089
好像有帖子说sentinel成为springcloud推荐的熔断,在调研限流的基础上有进行了熔断的调研,略微有些坑,搜了半天文章发现大家都是一样的,只实现了对限流的集成,看了下官方的源码,官方的源码只实现了对限流功能在zookeeper等可配置化的功能,并没有对熔断降级、热点这些的实现。其他文章无处借鉴.....没有办法,只好参照限流的动态配置以及结合熔断降级自己写了。以下内容均为原创哦~
首先看下熔断降级提供的三个方式

分别为RT,异常比例,异常数
RT为接口的响应时间,1秒钟同时有5个请求超过这个响应时间,则进行熔断
异常比例为一秒钟访问的接口数量,以及接口异常比例对应总访问量的比例
异常数即为一秒钟异常的个数
时间窗口即是在触发熔断时会持续的时间,举个栗子:触发熔断后,会在接下10秒内直接熔断,然后效果消失,如果在此触发熔断,会在持续10秒,以此类推
在这里直接贴出配置的json
[
{
"resource": "/action/test/test3",//访问的资源地址
"count": 500,//访问的个数,此处是一个double值,若grade=1,则是0.1~1.0之间的一个值,0和2时则为毫秒
"grade": 0,//0:RT 1:异常比例 2:异常数
"timeWindow": 10 //时间窗口,秒为单位
},
{
"resource": "POST:http://test-sentinel-provider/service/test/sentinel",
"count": 500,
"grade": 0,
"timeWindow": 10
}
]
在第二个json才是我们经常使用的微服务熔断,这个是sentinel支持springcloud的feign功能,需要在配置文件中进行开启,否则无法扫描到,配置如下:
feign:
sentinel:
enabled: true
说完配置,直接来说如何进行配置,首先直接说dashboard的配置:
在上一篇使用限流功能时阿里在test方法中提供了对限流功能的样例,那么这里同理,添加一个对服务降级的两个demo

首先打开zookeeperConfigUtil
public class ZookeeperConfigUtil {
public static final String RULE_ROOT_PATH = "/sentinel_rule_config";
public static final int RETRY_TIMES = 3;
public static final int SLEEP_TIME = 1000;
//之前ruleName不存在,因为只有针对限流的操作,此处需要增加一个路径,让每个项目有限流,熔断不同路径,同理限流需要同样修改
public static String getPath(String ruleName, String appName) {
StringBuilder stringBuilder = new StringBuilder(RULE_ROOT_PATH + "/" + ruleName);
if (StringUtils.isBlank(appName)) {
return stringBuilder.toString();
}
if (appName.startsWith("/")) {
stringBuilder.append(appName);
} else {
stringBuilder.append("/")
.append(appName);
}
return stringBuilder.toString();
}
}
zookeeperConfig
@Configuration
public class ZookeeperConfig {
@Value("${zookeeper.servers}")
private String zookeeperAddress;
@Bean
public Converter<List<FlowRuleEntity>, String> flowRuleEntityEncoder() {
return JSON::toJSONString;
}
@Bean
public Converter<String, List<FlowRuleEntity>> flowRuleEntityDecoder() {
return s -> JSON.parseArray(s, FlowRuleEntity.class);
}
//此处为新增的降级转换类,在这里还是膜拜一下阿里的大神们,虽然没有提供test样例,但是设计模式上的通用上值得我们学习
@Bean
public Converter<List<DegradeRuleEntity>, String> degradeRuleEntityEncoder() {
return JSON::toJSONString;
}
@Bean
public Converter<String, List<DegradeRuleEntity>> degradeRuleEntityDecoder() {
return s -> JSON.parseArray(s, De

本文深入探讨了Sentinel的熔断机制,包括其工作原理、配置方法及实践案例。详细解析了熔断的三种触发条件:响应时间、异常比例和异常数,以及时间窗口的概念。通过代码示例展示了如何在Spring Cloud项目中集成Sentinel的熔断功能。
最低0.47元/天 解锁文章
2644

被折叠的 条评论
为什么被折叠?



