spring-cloud-alibaba学习实例(3)–集成Sentinel
本节主要集成流量控制sentinel。
关于限流的使用和介绍见:Sentinel流量控制
1建立一个子模块 demo-sentinel
2引入所需要的jar
com.alibaba.cloud</groupId>
spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
org.springframework.boot</groupId>
spring-boot-starter-web</artifactId>
</dependency>
org.springframework.boot</groupId>
spring-boot-starter-actuator</artifactId>
</dependency>
com.alibaba.cloud</groupId>
spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
com.alibaba.cloud</groupId>
spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
com.alibaba.csp</groupId>
sentinel-datasource-nacos</artifactId>
</dependency>
spring-cloud-starter-alibaba-sentinel是使用 Sentinel需要的包
3新建配置文件bootstrap.yml和application.yml
application.yml
```yaml
server:
port: 8083
spring:
application.name: sentinel-demo
cloud:
sentinel:
transport.dashboard: localhost:8080
datasource:
ds.nacos:
ruleType: flow
groupId: DEFAULT_GROUP
dataId: ${spring.application.name}-sentinel
server-addr : localhost:8848
4 编写测试类
@RestController
public class TestController {
@Autowired
private TestService service;
@GetMapping(value = "/hello/{name}")
public String apiHello(@PathVariable String name) {
return service.sayHello(name);
}
}
@Service
public class TestService {
@SentinelResource(value = "sayHello")
public String sayHello(String name) {
return "Hello, " + name;
}
}
@SpringBootApplication
@EnableDiscoveryClient
public class SentinelApplication {
public static void main(String[] args) {
SpringApplication.run(SentinelApplication.class,args);
}
}
@SentinelResource这个注解,用于流量控制
5 下载安装 Sentinel Dashboard 下载地址 https://github.com/alibaba/Sentinel/releases
启动指令 java -jar sentinel-dashboard-1.6.0.jar
6Sentinel Dashboard 登录 初始密码sentinel/sentinel http://localhost:8080/#/login
7 启动项目
测试controller
只有请过一次之后,Sentinel Dashboard才能采集到信息,然后我们就可以进行流量控制了
6比如将阀值,改成极端情况0,那么这个请求,就会直接被降级
7设置降级规则 ,比如
根据规则 5s后
不过Sentinel Dashboard增加流量控制规则,是无法持久化,如果服务重启,那么所有的配置全部丢失。我们可以把配置信息放到nacos,nacos将配置信息持久化到数据库。
8在nacos中配置Sentinel Dashboard流量规则信息。
resource:资源名,即限流规则的作用对象
limitApp:流控针对的调用来源,若为 default 则不区分调用来源
grade:限流阈值类型(QPS 或并发线程数);0代表根据并发数量来限流,1代表根据QPS来进行流量控制
count:限流阈值
strategy:调用关系限流策略
controlBehavior:流量控制效果(直接拒绝、Warm Up、匀速排队)
clusterMode:是否为集群模式
[
{
“resource”: “/hello/{name}”,
“limitApp”: “default”,
“grade”: 1,
“count”: 5,
“strategy”: 0,
“controlBehavior”: 0,
“clusterMode”: false
}
]
这样就可以实现,规则的持久化,重启Sentinel Dashboard也不会丢失数据。有一点需要注意,想要持久化必须在nacos中修改规则,在Sentinel Dashboard修改的规则无法同步到nacos中的。
github https://github.com/userliyazhou/spirng-cloud-alibaba-project-demo/tree/master/alibaba-project-parent/demo-sentinel