一、下载地址
https://github.com/alibaba/Sentinel/releases
二、启动sentinel
只要双击bat文件即可(开箱即用)
三、配置pom文件和yml文件
<!--Spring Cloud Sentinel-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
与nacos同级
spring:
application:
name: nacos-stock # 定义当前服务名称
cloud:
nacos:
discovery:
server-addr: localhost:8848 # 指定正在运行的Nacos服务器的位置
sentinel:
transport:
dashboard: localhost:8080 #配置Sentinel提供的运行状态仪表盘
port: 8721 #执行限流的端口号,每个项目需设置不同端口号,例如cart模块设置为8722
四、在需要流量监控的方法添加注解@SentinelResource(value="对方法的描述",blockHandler = "限流时会调用的方法", fallback=“降级方法,抛异常时会先调用此方法”)
//Sentinel自定义限流方法,必须public,返回值必须包含限流对象方法的反回值
//在方法运行前不会被检测到,必须执行一次后才可以被检测到
//该注解需添加到controller层中
//blockHandler限流时调用的方法
@SentinelResource(value = "减少商品库存数",
blockHandler = "blokError"
fallback = "fallbackError")
public JsonResult reduceCommodityCount(
StockReduceCountDTO stockReduceCountDTO) {
// 调用业务逻辑层
stockService.reduceCommodityCount(stockReduceCountDTO);
return JsonResult.ok("库存减少完成!");
}
//Sentinel自定义限流方法,必须public,返回值必须包含限流对象方法的反回值
public JsonResult blokError(StockReduceCountDTO stockReduceCountDTO,
BlockException e) {
return JsonResult.failed(ResponseCode.INTERNAL_SERVER_ERROR,
"服务器忙请稍后再试");
}
//Sentinel自定义降级方法,必须public,返回值必须包含限流对象方法的反回值
public JsonResult fallbackError(StockReduceCountDTO stockReduceCountDTO,
Throwable e) {
return JsonResult.failed(ResponseCode.INTERNAL_SERVER_ERROR,
"运行发生异常,服务降级");
}
五、启动项目打开Sentinel
http://localhost:8080/#/dashboard/home 登录账号密码都是sentinel
六、限流,添加每秒点击次数,和并发数
七、降级
当限流发生后会抛出异常,使用降级会调用其他特定异常
测试
连续点击多次,服务器提示错误