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 } ]
配置信息: