先铺环境:
<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ㄒ)/~~