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内的其他调用直接返回熔断后的方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值