sentinel设置blockHandlerClass和blockHandler不生效的坑

先铺环境:

 <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <sprng.cloud.alibaba.version>2.2.6.RELEASE</sprng.cloud.alibaba.version>
        <spring.boot.version>2.3.2.RELEASE</spring.boot.version>
        <spring.cloud.version>Hoxton.SR9</spring.cloud.version>
    </properties>
    <!-- 依赖 -->
    <dependencyManagement>
        <dependencies>
            <!--spring cloud alibaba 版本管理器-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${sprng.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring boot 版本管理器-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud 版本管理器-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <!-- 配置文件设置 -->

依据官网匹配的版本规则,sentinel选择的1.8.1版本

 控制层依据官网配置全局方法,指定类和方法,方法和原方法同参,并且增加BlockException入参

@RestController
@RequestMapping("/consumer")
@RefreshScope // 刷新自定义配置文件数据
public class ConsumerController {

    @Resource
    private ProviderService providerService;
    @Value("${config.globeInfo}")
    private String globeInfo;

    @GetMapping("/test/{name}")
    @SentinelResource(value = "testBlock", blockHandlerClass = GlobeBlockException.class, blockHandler = "blockHandler")
    public String test(@PathVariable("name") String name)
    {
        return providerService.test(name) + "~~~~~~ " + globeInfo;
    }
}

全局处理

public class GlobeBlockException {
    public static String blockHandler(String name, BlockException e)
    {
        return "name:" + name + "~~被限流";
    }
}

未设置限流机制时,正常请求,无异常

 增加限流机制,设置QPS为1,超过1即触发限流:

结果显示系统默认返回值 Blocked by Sentinel (flow limiting),配置未生效:

 沉思,查看官网描述,没发现问题,继续沉思:

顿悟,SentinelResource设置了名称testBlock,这些配置是不是默认按照名称匹配呢?

    @SentinelResource(value = "testBlock", blockHandlerClass = GlobeBlockException.class, blockHandler = "blockHandler")

 添加名称限流设置:

 结果依旧gg。

接着顿悟,删掉按照地址匹配规则呢???

成了!!!!!!!!!!!!!!!!!!!!

 大功告成,没啥资料,忍不住吐槽,官网资料真少 /(ㄒoㄒ)/~~

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0808球痞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值