来源:https://blog.csdn.net/ohh_lang/article/details/136384205
注意:Nacos配置的时候,不能要//注释,必须是纯JSON字符串,以下JSON上的注释是为了说明字段而已。
bootstrap.yaml中的配置示例
server:
  port: 8001
spring:
  application:
    # Nacos添加配置,格式:${prefix}-${spring.profiles.active}.${file-extension}
    # 示例:cloud-order-service-dev.yaml
    name: cloud-order-service
  profiles:
    active: dev # 配置环境变量,Nacos配置DataId的一部分。自定义例如:dev test pro
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # Nacos作为服务中心地址
      config:
        server-addr: localhost:8848 # Nacos作为配置中心地址
        file-extension: yaml # Nacos配置后缀
        group: DEFAULT_GROUP # Nacos配置分组
        namespace: 8e23ce60-9f28-4fa7-875a-5e0d61b533d5 # Nacos配置命名空间的id,默认public
      username: nacos # Nacos登录账户
      password: 123456 # Nacos登录密码
    sentinel:
#      enable: true
#      filter:
#        enable: false
#      eager: true # 立即加载
      transport:
        web-context-unify: false # 默认true 将调用链路收敛, 导致链路流控效果无效
        dashboard: localhost:8080 # 配置sentinel dashboard地址。
        port: 8719 # 默认8719端口,如果被占用,则从8719递增检查未被占用的端口
      # sentienl 数据源配置 参考:https://blog.csdn.net/qq_42402854/article/details/127379403
      datasource:
        flow: # 自定义数据源名称,可以随便定义,目的是为了区分出每条规则,无实际应用。
          nacos:
            server-addr: localhost:8848 # Nacos地址
            username: nacos # Nacos账户
            password: 123456 # Nacos密码
            namespace: 8e23ce60-9f28-4fa7-875a-5e0d61b533d5 # Nacos命名空间必须使用id
            groupId: DEFAULT_GROUP # Nacos配置分组
            dataId: cloud-order-service-flow # Sentinel需要同步Nacos创建的流控配置DataId
            rule-type: flow # 规则类型 flow:流控规则
            data‐type: json # 默认值json,可以不填。
        param-flow:
          nacos:
            server-addr: localhost:8848 # Nacos地址
            username: nacos # Nacos账户
            password: 123456 # Nacos密码
            namespace: 8e23ce60-9f28-4fa7-875a-5e0d61b533d5 # Nacos命名空间必须使用id
            groupId: DEFAULT_GROUP # Nacos配置分组
            dataId: cloud-order-service-param-flow # Sentinel需要同步Nacos创建的流控配置DataId
            rule-type: param-flow # 规则类型 param-flow:热点规则
            data‐type: json # 默认值json,可以不填。
# feign开启Sentinel支持
feign:
  sentinel:
    enabled: true
# Nacos配置DataId命名说明
# ${prefix}-${spring.profiles.active}.${file-extension}
# prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
# spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
# file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

Nacos中添加的配置
命名空间:8e23ce60-9f28-4fa7-875a-5e0d61b533d5
Data ID:cloud-order-service-param-flow
Group:DEFAULT_GROUP
配置格式:JSON
配置内容:

[
    { 
      "resource": "cloud-order-service-TestController-getHobbies",
      "grade": 1,
      "paramIdx": 0,
      "count": 1,
      "durationInSec": 1,
      "clusterMode": false,
      "burstCount": 0,
      "clusterConfig": {
        "fallbackToLocalWhenFail": true,
        "flowId": 2,
        "sampleCount": 10,
        "thresholdType": 0,
        "windowIntervalMs": 1000
      },
      "controlBehavior": 0,
      "limitApp": "default",
      "maxQueueingTimeMs": 0,
      "paramFlowItemList": [
        {
          "classType": "int",
          "count": 2,
          "object": "2"
        }
      ]
    }
  ]

五种规则的json串及yml配置,需要自己删除掉json串的注释之后再添加到nacos中的配置中。
1.流控规则

[
      { 
        // 资源名
        "resource": "/test1",
        // 针对来源,若为 default 则不区分调用来源
        "limitApp": "default",
        // 限流阈值类型(1:QPS;0:并发线程数)
        "grade": 1,
        // 阈值
        "count": 1,
        // 是否是集群模式
        "clusterMode": false,
        // 流控效果(0:快速失败;1:Warm Up(预热模式);2:排队等待)
        "controlBehavior": 0,
        // 流控模式(0:直接;1:关联;2:链路)
        "strategy": 0,
        // 预热时间(秒,预热模式需要此参数)
        "warmUpPeriodSec": 10,
        // 超时时间(排队等待模式需要此参数)
        "maxQueueingTimeMs": 500,
        // 关联资源、入口资源(关联、链路模式)
        "refResource": "rrr"
      }
    ]

yaml

spring:
  cloud:
    sentinel:
      datasource:
        flow: #流控规则
          nacos:
            namespace: public
            server-addr: localhost:8848
            dataId: ${spring.application.name}-flow-rules
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: flow

2.熔断规则

[
    {
      // 资源名
      "resource": "/test2",
      "limitApp": "default",
      // 熔断策略(0:慢调用比例,1:异常比率,2:异常计数)
      "grade": 0,
      // 最大RT、比例阈值、异常数
      "count": 200,
      // 慢调用比例阈值,仅慢调用比例模式有效(1.8.0 引入)
      "slowRatioThreshold": 0.2,
      // 最小请求数
      "minRequestAmount": 5,
      // 当单位统计时长(类中默认1000)
      "statIntervalMs": 1000,
      // 熔断时长
      "timeWindow": 10
    }
  ]

yaml

spring:
  cloud:
    sentinel:
      datasource:
        degrade: #熔断规则
          nacos:
            namespace: public
            server-addr: localhost:8848
            dataId: ${spring.application.name}-degrade-rules
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: degrade

3.热点规则

[
    { 
      // 资源名
      "resource": "/test3",
      // 限流模式(QPS 模式,不可更改)
      "grade": 1,
      // 参数索引
      "paramIdx": 0,
      // 单机阈值
      "count": 13,
      // 统计窗口时长
      "durationInSec": 6,
      // 是否集群 默认false
      "clusterMode": false,
      "burstCount": 0,
      // 集群模式配置
      "clusterConfig": {
        "fallbackToLocalWhenFail": true,
        "flowId": 2,
        "sampleCount": 10,
        "thresholdType": 0,
        "windowIntervalMs": 1000
      },
      // 流控效果(支持快速失败和匀速排队模式)
      "controlBehavior": 0,
      "limitApp": "default",
      "maxQueueingTimeMs": 0,
      // 高级选项
      "paramFlowItemList": [
        {
          // 参数类型
          "classType": "int",
          // 限流阈值
          "count": 222,
          // 参数值
          "object": "2"
        }
      ]
    }
  ]

yaml

spring:
  cloud:
    sentinel:
      datasource:
        param-flow: #热点参数规则
          nacos:
            namespace: public
            server-addr: localhost:8848
            dataId: ${spring.application.name}-param-flow-rules
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: param-flow

4.系统规则

[
    { 
      // RT
      "avgRt": 1,
      // CPU 使用率
      "highestCpuUsage": -1,
      // LOAD
      "highestSystemLoad": -1,
      // 线程数
      "maxThread": -1,
      // 入口 QPS
      "qps": -1
    }
  ]

yaml

spring:
  cloud:
    sentinel:
      datasource:
        system: #系统规则
          nacos:
            namespace: public
            server-addr: localhost: 8848
            dataId: ${spring.application.name}-system-rules
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: system

5.授权规则

[
    {
      // 资源名
      "resource": "/test4",
      // 流控应用
      "limitApp": "app1,app2",
      // 授权类型(0代表白名单;1代表黑名单。)
      "strategy": 0
    }
  ]

yaml

spring:
  cloud:
    sentinel:
      datasource:
        authority: #授权规则
          nacos:
            namespace: public
            server-addr: localhost:8848
            dataId: ${spring.application.name}-authority-rules
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: authority

 rule-type说明  flow:流控规则。degrade:熔断规则。param-flow:热点规则。system:系统规则。authority:授权规则。

posted on 2024-08-06 14:23  邢帅杰  阅读(447)  评论(0编辑  收藏  举报