持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
上一期分享一下sentinel的代码实现和注解实现,今天分享一下控制台实现。
- 控制台首先选择创建流量规则
- 设置资源名称(服务接口地址)
- 设置QPS 为1 表示每s最多能够访问1次接口(超出多少个线程,直接拒绝处理请求)
首先我们搭建sentinel环境
下载对应Sentinel-Dashboard
<https://github.com/alibaba/Sentinel/releases/tag/1.7.1> 运行即可。
运行执行命令
java -Dserver.port=8718 -Dcsp.sentinel.dashboard.server=localhost:8718 -Dproject.name=sentinel-dashboard -Dcsp.sentinel.api.port=8719 -jar
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel</artifactId>
<version>0.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
代码增加注解@SentinelResource
public String getTestQpsException(BlockException e) {
e.printStackTrace();
return "该接口已经被QPS限流啦";
}
@SentinelResource(value = "getTestDashboard", blockHandler = "getTestQpsException" )
@RequestMapping("/getTestDashboard")
public String getTestDashboard() {
return "getTestDashboard" ;
}
配置文件新增配置
sentinel:
transport:
dashboard: 127.0.0.1:8718
eager: true
并发线程数控制
代码示例
public String getTestThreadException(BlockException e) {
e.printStackTrace();
return "该接口已经被线程数限流啦";
}
@SentinelResource(value = "getTestThread", blockHandler = "getTestThreadException")
@RequestMapping("/getTestThread")
public String getTestThread() {
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (Exception e) {
}
return "getTestThread";
}
回顾一下之前的实现方式: 限流配置有两种方案: 1.手动使用代码配置 纯代码/注解的形式 2.Sentinel 控制台形式配置 默认情况下Sentinel 不对数据持久化,需要自己独立持久化
sentinel的优点
- 丰富的应用场景:前哨兵承接了阿里巴巴近10年的双十一大促流的核心场景,例如秒杀(即突然流量控制在系统容量可以承受的范围),消息削峰填谷,传递流量控制,实时熔断下游不可用应用等。
- 完备的实时监控:Sentinel同时提供实时的监控功能。您可以在控制台中看到接收应用的单台机器秒级数据,甚至500台以下规模的整合的汇总运行情况。
- 广泛的开源生态:Sentinel提供开箱即用的与其他开源框架/库的集成模块,例如与Spring Cloud,Dubbo,gRPC的整合。您只需要另外的依赖并进行简单的配置即可快速地接入Sentinel。
- 完善的SPI扩展点:Sentinel提供简单易用,完善的SPI扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理,适应动态数据源等。
项目启动成功之后,加载我们的限流的规则,因为Sentinel限流规则没有持久化,有需要持久化的话采用zk、nacos、阿波罗等。