Sentinel学习(二)在Sring项目配置和使用Sentinel

前面的文章创建了简单的Spring Boot应用,使用了Nacos作为配置和服务发现中心,现在再为它添加Sentinel流量监控功能。
以下我们为之前的项目添加 Sentinel功能,由于是Spring Boot以及Cloud,此次我们也是使用Spring Cloud Alibaba的组件spring-cloud-alibaba-sentinal,更多详细信息可以参考官方文档 Spring Cloud Alibaba Sentinel:

配置:

  1. pom.xml中添加相关依赖项:

     
         org.springframework.cloud
         spring-cloud-starter-alibaba-sentinel
         0.9.0.RELEASE
     
    
     
         com.alibaba.csp
         sentinel-core
         1.6.3
     
    

由于spring-cloud-starter-alibaba-sentinel已经为我们引入了使用Sentinel所需大部分依赖项,我们只需要再添加sentinel-core依赖项即可。

  1. 应用中的配置
#指定dashbord地址
spring.cloud.sentinel.transport.dashboard=localhost:9090
#提前触发Sentinel初始化
spring.cloud.sentinel.eager=true
#指定sentinel数据源
spring.cloud.sentinel.datasource.ds2.nacos.server-addr=localhost:8848
spring.cloud.sentinel.datasource.ds2.nacos.data-id=sentinel
spring.cloud.sentinel.datasource.ds2.nacos.group-id=quickstart_cloud
spring.cloud.sentinel.datasource.ds2.nacos.data-type=json
spring.cloud.sentinel.datasource.ds2.nacos.rule-type=flow

sentinel支持四种数据源,文件、nacos配置、zookeeper配置和apollo配置,由于我们已经应用nacos作为配置中心,因此也将sentinel的规则数据配置在nacos上面,具体dataid和group根据实际配置,以下使用json格式流量控制规则配置为例:

[
  {
    "resource": "/hello",
    "controlBehavior": 0,
    "count": 1,
    "grade": 1,
    "limitApp": "default",
    "strategy": 0
  },
  {
    "resource": "/test",
    "controlBehavior": 0,
    "count": 0,
    "grade": 1,
    "limitApp": "default",
    "strategy": 0
  },
  {
    "resource": "GET:http://www.taobao.com",
    "controlBehavior": 0,
    "count": 0,
    "grade": 1,
    "limitApp": "default",
    "strategy": 0
  }
]

配置解析:

  • resource: 资源名,即限流规则的作用对象
  • grade:流量控制主要有两种统计类型,一种是统计并发线程数,另外一种则是统计 QPS,由grade字段定义, 0 代表根据并发数量来限流,1 代表根据 QPS 来进行流量控制
  • controlBehavior: 当 QPS 超过某个阈值的时候,则采取措施进行流量控制。流量控制包括:直接拒绝(0)、Warm Up(1)、匀速排队(2),默认直接拒绝,3是热身+匀速排队
  • count: 限流阈值
  • limitApp: 根据调用来源进行流量控制,defaut表示不区分调用者,{some_origin_name},可以指定一个或多个调用方,使用逗号分隔;other表示针对除 {some_origin_name} 以外的其余调用方的流量进行流量控制。例如,资源NodeA配置了一条针对调用者 caller1 的限流规则,同时又配置了一条调用者为 other 的规则,那么任意来自非 caller1 对 NodeA 的调用,都不能超过 other 这条规则定义的阈值
  • 同一个资源名可以配置多条规则,规则的生效顺序为:{some_origin_name} > other > default
  • strategy:调用关系限流策略,0表示直接生效,1表示设置关联限流,如果关联方流量较大时,当前资源会被限流,2表示设置链路限流,NodeSelectorSlot 中记录了资源之间的调用链路,这些资源通过调用关系,相互之间构成一棵调用树。这棵树的根节点是一个名字为 machine-root 的虚拟节点,调用链的入口都是这个虚节点的子节点,如果设置了链路限流并指定入口,那么只有指定入口的调用才会记录到限流统计中。

代码

假设Service类有个方法想设置限流,那么可以使用 @SentinelResource(value = "这里填写资源名称")注解进行标识。更多的用法可以参考官方示例。

你可能感兴趣的:(Sentinel学习(二)在Sring项目配置和使用Sentinel)