spring-cloud-alibaba学习实例(3)--集成Sentinel

spring-cloud-alibaba学习实例(3)–集成Sentinel
本节主要集成流量控制sentinel。
关于限流的使用和介绍见:Sentinel流量控制

1建立一个子模块 demo-sentinel
spring-cloud-alibaba学习实例(3)--集成Sentinel_第1张图片
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

spring-cloud-alibaba学习实例(3)--集成Sentinel_第2张图片
启动指令 java -jar sentinel-dashboard-1.6.0.jar
spring-cloud-alibaba学习实例(3)--集成Sentinel_第3张图片

6Sentinel Dashboard 登录 初始密码sentinel/sentinel http://localhost:8080/#/login
spring-cloud-alibaba学习实例(3)--集成Sentinel_第4张图片
spring-cloud-alibaba学习实例(3)--集成Sentinel_第5张图片
7 启动项目
spring-cloud-alibaba学习实例(3)--集成Sentinel_第6张图片
测试controller
spring-cloud-alibaba学习实例(3)--集成Sentinel_第7张图片
只有请过一次之后,Sentinel Dashboard才能采集到信息,然后我们就可以进行流量控制了
spring-cloud-alibaba学习实例(3)--集成Sentinel_第8张图片
6比如将阀值,改成极端情况0,那么这个请求,就会直接被降级
spring-cloud-alibaba学习实例(3)--集成Sentinel_第9张图片
在这里插入图片描述
spring-cloud-alibaba学习实例(3)--集成Sentinel_第10张图片
7设置降级规则 ,比如
spring-cloud-alibaba学习实例(3)--集成Sentinel_第11张图片
spring-cloud-alibaba学习实例(3)--集成Sentinel_第12张图片
根据规则 5s后
spring-cloud-alibaba学习实例(3)--集成Sentinel_第13张图片

不过Sentinel Dashboard增加流量控制规则,是无法持久化,如果服务重启,那么所有的配置全部丢失。我们可以把配置信息放到nacos,nacos将配置信息持久化到数据库。
8在nacos中配置Sentinel Dashboard流量规则信息。

spring-cloud-alibaba学习实例(3)--集成Sentinel_第14张图片
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
spring-cloud-alibaba学习实例(3)--集成Sentinel_第15张图片

你可能感兴趣的:(spring-cloud-alibaba学习实例(3)--集成Sentinel)