通过在nacos配置中心定义规则并发布成功之后,推送到sentinel控制台就可以生效了。
1、创建SpringBoot项目
2、pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.xxj</groupId>
<artifactId>sentinel05</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>sentinel05</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.1</version>
</dependency>
<!--nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<!-- sentinel做持久化配置-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<version>1.7.1</version>
</dependency>
<!--引入sentinel-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.2.1.RELEASE</version>
<exclusions>
<exclusion>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--监控系统的健康指标-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3、yml文件
server:
port: 10005
spring:
application:
name: sentinel05
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
sentinel:
transport:
port: 8719
dashboard: localhost:8080 #配置Sentinel dashboard地址
datasource:
#flow、degrade、system、authority、param-flow名字是随意起得
flow:
nacos:
server-addr: localhost:8848
dataId: cloudalibaba-sentinel-service
groupId: DEFAULT_GROUP
data-type: json
rule-type: flow
degrade:
nacos:
server-addr: localhost:8848
dataId: ${spring.application.name}-degrade
groupId: DEFAULT_GROUP
data-type: json
rule-type: degrade
system:
nacos:
server-addr: localhost:8848
dataId: ${spring.application.name}-system
groupId: DEFAULT_GROUP
data-type: json
rule-type: system
authority:
nacos:
server-addr: localhost:8848
dataId: ${spring.application.name}-authority
groupId: DEFAULT_GROUP
data-type: json
rule-type: authority
param-flow:
nacos:
server-addr: localhost:8848
dataId: ${spring.application.name}-param
groupId: DEFAULT_GROUP
data-type: json
rule-type: param-flow
management:
endpoints:
web:
exposure:
include: '*'
4、测试代码
package com.xxj.sentinel05.controller;
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class FlowLimitController
{
@GetMapping("/test")
public String test() {
return "测试完毕";
}
@GetMapping("/byUrl")
@SentinelResource(value = "byUrl")
public String byUrl() {
return "访问成功";
}
}
5、启动类
package com.xxj.sentinel05;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class Sentinel05Application {
public static void main(String[] args) {
SpringApplication.run(Sentinel05Application.class, args);
}
}
6、nacos规则配置
流控规则
[
{
"resource": "/byUrl",
"limitApp": "default",
"grade": 1,
"count": 1,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
},
{
"resource": "byUrl",
"limitApp": "default",
"grade": 1,
"count": 1,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
},
{
"resource": "/test",
"limitApp": "default",
"grade": 1,
"count": 2,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]
- resource:资源名称
- limitApp:来源应用
- grade:阈值类型,0代表线程数,1代表QPS
- count:单击阈值
- strategy:流控模式,0代表直接,1代表关联,2代表链路
- controlBehavior:流控效果,0代表快速失败,1代表Warm Up,2代表排队等待
- clusterMode:是否集群
- 其它规则的字段属性请查看官网:https://github.com/alibaba/Sentinel/wiki/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8
降级规则
[
{
"resource":"degrade",
"grade": 0,
"count": 2,
"timeWindow": 2
}
]
系统规则
[
{
"highestSystemLoad":10,
"highestCpuUsage":1.0
}
]
黑白名单规则
[
{
"resource":"authority",
"limitApp":"appA",
"strategy":1
}
]
热点参数规则
[
{
"resource":"param",
"grade": 0,
"count": 2,
"paramIdx":0
}
]
7、访问接口并查看sentinel控制台
注意:一定要先访问接口,成功之后,才能在控制台看到流控规则持久化后的结果。