sentinel设置blockHandlerClass和blockHandler不生效的坑

时间: 2024-11-10 admin IT培训

sentinel设置blockHandlerClass和blockHandler不生效的坑

sentinel设置blockHandlerClass和blockHandler不生效的坑

先铺环境:

 <properties><java.version>1.8</java.version><mavenpiler.source>8</mavenpiler.source><mavenpiler.target>8</mavenpiler.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 {@Resourceprivate 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ㄒ)/~~