我是靠谱客的博主 爱听歌小土豆,最近开发中收集的这篇文章主要介绍Sentinel熔断(非控制台),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

熔断,在微服务中表示下游服务出现故障时,为防止上游服务继续调用,而根据设置的策略进行断开连接。目前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熔断(非控制台)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部