概述
熔断,在微服务中表示下游服务出现故障时,为防止上游服务继续调用,而根据设置的策略进行断开连接。目前SpringCloud提供了四种熔断框架:Netfix Hystrix(仅维护不更新)、Resilience4J、Sentinel、Spring Retry。
地址为:Spring Cloud Circuit Breaker
目前国内使用的Sentinel比较多,但是大多都依赖控制台,这里以单项目进行测试,没采用控制台模式。
1. pom配置
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
由于本人的SpringBoot版本为 2.1.7.RELEASE,对应的sentinel就是上面这个版本。具体版本对应关系地址为:组件版本关系
2. 配置熔断策略
@Configuration
public class DegradeConfig {
@PostConstruct
public void initDegradeRule(){
List<DegradeRule> degradeRuleList=new ArrayList<>();
//定义降级规则
DegradeRule degradeRule=new DegradeRule();
//设置降级规则所对应的资源名称
degradeRule.setResource("testPid");
//根据发生异常的次数进行降级
degradeRule.setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT);
//至少要有两次请求才会降级,第一次请求时发生异常也不会降级
degradeRule.setMinRequestAmount(2);
//发生异常的次数达到1后开始降级
degradeRule.setCount(1);
//降级的时间窗口,在10秒内,所有的请求都直接降级
degradeRule.setTimeWindow(10);
//表示熔断后10秒内的其他调用都走熔断方法
degradeRule.setStatIntervalMs(10000);
//把降级规则添加到降级规则列表
degradeRuleList.add(degradeRule);
//把降级列表添加到降级规则管理器
DegradeRuleManager.loadRules(degradeRuleList);
}
}
3.注解式熔断入口
@GetMapping("/test")
@SentinelResource(value="testPid",entryType= EntryType.OUT,blockHandler ="exceptionHandler",fallback = "helloFallback")
public RestResult test() {
Long aa = PidFeignClient.getSnowId();
return RestResultUtils.success(aa);
}
public RestResult exceptionHandler(BlockException ex){
ex.printStackTrace();
return RestResultUtils.fail("Oops,error occurred at ");
}
public RestResult helloFallback() {
return RestResultUtils.fail("fallback error 调用异常了 ");
}
如果需要切面的话,可以配置:
@Bean
public SentinelResourceAspect sentinelResourceAspect() {
return new SentinelResourceAspect();
}
调用方法即可发现,第二次熔断后,10s内的其他调用直接返回熔断后的方法。
最后
以上就是爱听歌小土豆为你收集整理的Sentinel熔断(非控制台)的全部内容,希望文章能够帮你解决Sentinel熔断(非控制台)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复