栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Sentinel熔断(非控制台)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Sentinel熔断(非控制台)

熔断,在微服务中表示下游服务出现故障时,为防止上游服务继续调用,而根据设置的策略进行断开连接。目前SpringCloud提供了四种熔断框架:Netfix Hystrix(仅维护不更新)、Resilience4J、Sentinel、Spring Retry。

地址为:Spring Cloud Circuit Breaker

目前国内使用的Sentinel比较多,但是大多都依赖控制台,这里以单项目进行测试,没采用控制台模式。

1. pom配置

        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-sentinel
            2.1.3.RELEASE
        

由于本人的SpringBoot版本为 2.1.7.RELEASE,对应的sentinel就是上面这个版本。具体版本对应关系地址为:组件版本关系 

2. 配置熔断策略

@Configuration
public class DegradeConfig {
    @PostConstruct
    public void initDegradeRule(){
        List 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内的其他调用直接返回熔断后的方法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/782344.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号