1.sentinel介绍
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的轻量级流量控制产品,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助您保护服务的稳定性。
2.sentinel的安装
2.1 下载sentinel图形化界面的jar包

2.2 运行命令
打开cmd执行 java -jar sentinel-dashboard-1.7.2.jar

2.3 访问dashboard
在浏览器访问 http://localhost:8080/ ,我们可以看到如下页面

用户名密码都是sentinel
3.sentinel初始化监控
3.1 安装依赖
<dependencies>
<dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
<groupId>com.gh.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--SpringCloud ailibaba sentinel-datasource-nacos 后续sentinel做持久化用到-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
<!--SpringCloud ailibaba sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!--openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- SpringBoot整合Web组件+actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.6.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3.2 编写配置文件
springboot核心配置文件application.yml
server: port: 8401 spring: application: name: cloudalibaba-sentinel-service cloud: nacos: discovery: server-addr: localhost:8848 #Nacos服务注册中心地址 sentinel: transport: dashboard: localhost:8080 #配置Sentinel dashboard地址 port: 8719 datasource: ds1: nacos: server-addr: localhost:8848 dataId: ${spring.application.name} groupId: DEFAULT_GROUP data-type: json rule-type: flow management: endpoints: web: exposure: include: '*'
3.3 编写启动类
@SpringBootApplication @EnableDiscoveryClient public class MainApp8401 { public static void main(String[] args) { SpringApplication.run(MainApp8401.class,args); } }
3.4 启动项目
启动项目访问 http://localhost:8080/#/dashboard/home 我们即可看到sentinel已经将服务进行监控

4.sentinel流控
4.1 设置限流
在sentinel控制台流控规则处添加

4.2 测试
当1秒内连续点击时就出现如下图所示情况

5.sentinel降级
5.1 设置降级
在sentinel控制台降级规则处添加

6.sentinel热点key
热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流,热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源生效.
6.1 编写限流规则
blockHandler指定的deal_hotKey代表兜底方法
@GetMapping("testHotKey")
@SentinelResource(value = "testHotKey",blockHandler = "deal_hotKey")
public String testHotKey(@RequestParam(value = "p1",required = false) String p1,
@RequestParam(value = "p2",required = false) String p2){
return "test HotKey";
}
public String deal_hotKey(String p1, String p2, BlockException b){
return "deal_hotKey o(╥﹏╥)o";
}
6.2 配置限流规则
在sentinel控制台进行配置热点规则

方法testHotKey里面第一个参数只要QPS超过每秒一次,马上降级处理,就会执行我们自己设置的兜底方法
需求: 我们期望p1参数当它是某个特殊值时,它的限流值和平时不一样.
点击编辑进行高级选项设置.

7.持久化
7.1 依赖
引入nacos做持久化所需依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
相关配置信息

在nacos中进行配置
[ { "resource":"/rateLimit/byUrl", "limitApp":"default", "grade":1, "count":1, "strategy":0, "controlBehavior":0, "clusterMode":false } ]

配置信息:
