六、Spring Cloud Alibaba毕业版:使用Sentinel实现容错

(一)什么是Sentinel

轻量级的流量控制、熔断降级Java库,以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

(二)项目整合Sentinel

1.添加依赖
       
            com.alibaba.cloud
            spring-cloud-starter-alibaba-sentinel
        
2.搭建Sentinel控制台

Sentinel 控制台提供一个轻量级的控制台,它提供机器发现、单机资源实时监控、集群资源汇总,以及规则管理的功能。您只需要对应用进行简单的配置,就可以使用这些功能。

  • 下载Sentinel控制台
    如果想用最新版本可以在官方地址下载,在生产环境下应与项目中引用的版本所对应
    六、Spring Cloud Alibaba毕业版:使用Sentinel实现容错_第1张图片
    下载地址:https://github.com/alibaba/Sentinel/releases
    官方下载比较慢,这里了一个1.6.2版本的jar
    下载地址: https://pan.baidu.com/s/1XaMZHhodqo5Dc5xFqxCzYw 提取码: g6cu
  • 通过java -jar命令启动控制台
  • 启动完成后可以http://localhost:8080访问控制台
    六、Spring Cloud Alibaba毕业版:使用Sentinel实现容错_第2张图片
  • 输入用户名密码登录 用户名:sentinel 密码:sentinel
    六、Spring Cloud Alibaba毕业版:使用Sentinel实现容错_第3张图片
  • 登录后进入首页会发现是空的,这里是因为sentinel是懒加载的,启动项目发送请求后,刷新页面就可以看到服务了
    六、Spring Cloud Alibaba毕业版:使用Sentinel实现容错_第4张图片
  • 点击“簇点链路”可以看到访问过的路径,并可以进行降级、限流等操作
    六、Spring Cloud Alibaba毕业版:使用Sentinel实现容错_第5张图片
3.测试项目和Sentinel整合

@SentinelResource 用于定义资源,并提供可选的异常处理和 fallback 配置项。 @SentinelResource 注解包含以下属性:

  • value: 资源名称,必需项
  • entryType: 入口类型,可选项
  • blockHandler / blockHandlerClass: blockHandler 对应处理 BlockException 的函数名称,可选项。若未配置,则将 BlockException 直接抛出。blockHandler 函数访问范围需要是 public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException。blockHandler 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 blockHandlerClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。
  • fallback / fallbackClass: fallback 函数名称,可选项,仅针对降级功能生效(DegradeException)。fallback 函数的访问范围需要是 public,参数类型和返回类型都需要与原方法相匹配,并且需要和原方法在同一个类中,Sentinel 1.6开始,也可在方法最后加 Throwable 类型的参数,可以处理任何异常。若希望使用其他类的函数,则可以指定fallbackClass,存放fallback的类。对应的处理函数必须static修饰,否则无法解析。
    @GetMapping("/test-sentinel-resource")
    @SentinelResource(
            value = "test-sentinel-resource",
            blockHandler  = "blockHandler"
    )
    public String testSentinelResource(@RequestParam(required = false) String a) {
        return a;
    }

    // Block 异常处理函数,参数最后多一个 BlockException,其余与原函数一致.
    public String blockHandler (String a,BlockException e ) {
        log.warn("限流或者降级了",e);
        return "限流,或者降级了";
    }

@GetMapping("/test-sentinel-fallback")
    @SentinelResource(
            value = "test-sentinel-fallback",
            fallback= "fallback"
    )
    public String testSentinelResource(@RequestParam(required = false) String a) {
        if (StringUtils.isBlank(a)) {
            throw new IllegalArgumentException(" cannot be blank.");
        }
        return a;
    }

    // falback处理
    public String fallback(String a,Throwable throwable) {
        log.warn("限流,或者降级了",throwable);
        return "限流,或者降级了";
    }

访问/test-sentinel-resource和/test-sentinel-fallback接口,然后在控制台设置限流和降级,再次访问就可以看到被限流或者降级了。
六、Spring Cloud Alibaba毕业版:使用Sentinel实现容错_第6张图片

参考官方文档:https://github.com/alibaba/spring-cloud-alibaba/blob/5b07a560be26374b8709e01884ccdc875e61adb9/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sentinel.adoc

你可能感兴趣的:(一起学spring,cloud,alibaba)