zoukankan      html  css  js  c++  java
  • SpringCloudAlibaba

    前言

    @SentinelResource用于定义Sentinel资源


    具体使用

    简单示例

    • SentinelResourceController.java
    import com.alibaba.csp.sentinel.annotation.SentinelResource;
    import com.alibaba.csp.sentinel.slots.block.BlockException;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.commons.lang.StringUtils;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @Description @SentinelResource 使用示例
     */
    @RestController
    @RequestMapping("/sentinel_resource")
    @Slf4j
    public class SentinelResourceController {
    
        @GetMapping("/test")
        @SentinelResource(value = "sentinel_resource_test", blockHandler = "block")
        public String test(@RequestParam(required = false) String name) {
            if (StringUtils.isBlank(name)) {
                throw new IllegalArgumentException("name不能为空");
            }
            return name;
        }
    
    	/**
         * 处理限流或降级
         * @param a
         * @param e
         * @return
         */
        public String block(String a, BlockException e) {
            log.warn("限流,或者降级了", e);
            return "限流,或者降级了 block";
        }
    
    	/**
         * 处理降级
         * @param a
         * @return
         */
        public String fallback(String a) {
            log.warn("限流,或者降级了 fallback");
            return "限流,或者降级了 fallback";
        }
    
    }
    
    • /sentinel_resource/test接口访问

    在这里插入图片描述


    • 新增一条降级规则,异常比例阈值为0.1

    在这里插入图片描述

    • 不传递参数频繁调用

    在这里插入图片描述


    • 删除降级规则新增一条QPS1的流控规则

    在这里插入图片描述

    • 频繁访问接口导致限流

    在这里插入图片描述



    blockHandlerClass 单独配置

    • TestBlockHandler.java
    import com.alibaba.csp.sentinel.slots.block.BlockException;
    import lombok.extern.slf4j.Slf4j;
    
    @Slf4j
    public class TestBlockHandler {
        /**
         * 处理限流或者降级
         * @param name
         * @param e
         * @return
         */
        public static String block(String name, BlockException e) {
            log.warn("限流,或者降级了 block", e);
            return "限流,或者降级了 block";
        }
    }
    
    • SentinelResourceController.java
    @GetMapping("/test")
    @SentinelResource(
            value = "sentinel_resource_test",
            blockHandler = "block",
            blockHandlerClass = TestBlockHandler.class,
            fallback = "fallback"
    )
    public String test(@RequestParam(required = false) String name) {
        if (StringUtils.isBlank(name)) {
            throw new IllegalArgumentException("name不能为空");
        }
        return name;
    }
    

    注解属性

    属性 作用 是否必须
    value 资源名称
    entryType entry类型,标记流量的方向,取值IN/OUT,默认是OUT
    blockHandler 处理BlockException的函数名称,函数要求:
    1. 必须是 public
    2.返回类型与原方法一致
    3. 参数类型需要和原方法相匹配,并在最后加 BlockException 类型的参数。
    4. 默认需和原方法在同一个类中。若希望使用其他类的函数,可配置 blockHandlerClass ,并指定blockHandlerClass里面的方法
    blockHandlerClass 存放blockHandler的类。对应的处理函数必须static修饰,否则无法解析,其他要求:同blockHandler。
    fallback 用于在抛出异常的时候提供fallback处理逻辑。fallback函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。函数要求:
    1. 返回类型与原方法一致
    2. 参数类型需要和原方法相匹配,Sentinel 1.6开始,也可在方法最后加 Throwable 类型的参数。
    3.默认需和原方法在同一个类中。若希望使用其他类的函数,可配置 fallbackClass ,并指定fallbackClass里面的方法。
    fallbackClass 存放fallback的类。对应的处理函数必须static修饰,否则无法解析,其他要求:同fallback。
    defaultFallback 用于通用的 fallback 逻辑。默认fallback函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。若同时配置了 fallback 和 defaultFallback,以fallback为准。函数要求:
    1. 返回类型与原方法一致
    2. 方法参数列表为空,或者有一个 Throwable 类型的参数。
    3. 默认需要和原方法在同一个类中。若希望使用其他类的函数,可配置 fallbackClass ,并指定 fallbackClass 里面的方法。
    exceptionsToIgnore 指定排除掉哪些异常。排除的异常不会计入异常统计,也不会进入fallback逻辑,而是原样抛出。
    exceptionsToTrace 需要trace的异常 Throwable

    注:若 blockHandler 和 fallback 都进行了配置,则被限流降级而抛出 BlockException 时只会进入 blockHandler 处理逻辑。若未配置 blockHandler、fallback 和 defaultFallback,则被限流降级时会将 BlockException 直接抛出。



    - End -
    白嫖有风险
    点赞加收藏
    以上为本篇文章的主要内容,希望大家多提意见,如果喜欢记得点个推荐哦
    作者:Maggieq8324
    本文版权归作者和博客园共有,欢迎转载,转载时保留原作者和文章地址即可。
  • 相关阅读:
    洛谷P6276 [USACO20OPEN]Exercise P(生成函数)
    牛顿迭代求逆元
    线性基求交
    我卷我自己加强
    AGC013 简要题解
    LOJ#6074 「2017 山东一轮集训 Day6」
    JAVA根据下载地址获取文件的Base64
    JS 作用链,箭头函数 this 取值
    Leetcode 1249 移除无效的括号
    Vue的数据绑定
  • 原文地址:https://www.cnblogs.com/maggieq8324/p/15338864.html
Copyright © 2011-2022 走看看