diff --git a/script/sentinel/gateway-server/gateway-server-degrade-rules.json b/script/sentinel/gateway-server/gateway-server-degrade-rules.json new file mode 100644 index 000000000..5cd82e079 --- /dev/null +++ b/script/sentinel/gateway-server/gateway-server-degrade-rules.json @@ -0,0 +1,11 @@ +[ + { + "resource": "feign-test", // 资源名 + "count": 1000, // 当熔断策略是慢调用时,此值为最大RT,单位是毫秒。当熔断是策略是异常比例时,此值为异常比例。当熔断策略是异常数时,此值为异常数目 + "timeWindow": 5, // 熔断时长,单位是秒 + "grade": 0, // 0: 慢调用, 1: 异常比例,2:异常数 + "minRequestAmount": 2, // 最小请求数 + "slowRatioThreshold": 0.2, // 比例阈值 + "statIntervalMs": 10000 // 统计时长,单位毫秒 + } +] \ No newline at end of file diff --git a/script/sentinel/gateway-server/gateway-server-gw-flow-rules.json b/script/sentinel/gateway-server/gateway-server-gw-flow-rules.json new file mode 100644 index 000000000..f80c1d360 --- /dev/null +++ b/script/sentinel/gateway-server/gateway-server-gw-flow-rules.json @@ -0,0 +1,12 @@ +[ + { + "resource": "feign-test", // 资源名 + "resourceMode": 0, // API类型, 0: ROUTE ID区分, 1: API + "count": 1, // 阈值,QPS类型就是限制时间间隔的请求数,线程数类型就是指并行的线程数 + "grade": 1, // 阈值类型,0:线程数,1:QPS + "controlBehavior": 2, // 流控方式,0:快速失败,2:匀速排队 + "intervalSec": 10, // 间隔,单位是秒 + "burst": 0, // burst,只有在快速失败时才有效 + "maxQueueingTimeoutMs": 1000 // 超时时间,单位是毫秒 + } +] \ No newline at end of file diff --git a/script/sentinel/gateway-server/gateway-server-system-rules.json b/script/sentinel/gateway-server/gateway-server-system-rules.json new file mode 100644 index 000000000..6fb378ca0 --- /dev/null +++ b/script/sentinel/gateway-server/gateway-server-system-rules.json @@ -0,0 +1,10 @@ +[ + { + "avgRt": 1, // RT + "highestCpuUsage": -1, // CPU 使用率 + "highestSystemLoad": -1, // LOAD + "maxThread": -1, // 线程数 + "qps": -1, // 入口 QPS + "count": 55 // 阈值,在CPU使用率中是百分比 + } +] \ No newline at end of file diff --git a/script/sentinel/system-server/system-server-authority-rules.json b/script/sentinel/system-server/system-server-authority-rules.json new file mode 100644 index 000000000..a8d6241d8 --- /dev/null +++ b/script/sentinel/system-server/system-server-authority-rules.json @@ -0,0 +1,7 @@ +[ + { + "resource": "sentinel_spring_web_context", + "limitApp": "/test", + "strategy": 0 // 授权类型(0代表白名单;1代表黑名单。) + } +] \ No newline at end of file diff --git a/script/sentinel/system-server/system-server-degrade-rules.json b/script/sentinel/system-server/system-server-degrade-rules.json new file mode 100644 index 000000000..75f6047b1 --- /dev/null +++ b/script/sentinel/system-server/system-server-degrade-rules.json @@ -0,0 +1,11 @@ +[ + { + "resource": "/degrade-test", + "grade": 0, // 熔断策略,支持慢调用比例(0),异常比例(1),异常数(2)策略 + "count": 1000, // 慢调用比例模式下为慢调用临界 RT(超出该值计为慢调用,单位ms);异常比例/异常数模式下为对应的阈值 + "slowRatioThreshold": 0.1,// 慢调用比例阈值,仅慢调用比例模式有效(1.8.0 引入) + "minRequestAmount": 10, //熔断触发的最小请求数,请求数小于该值时即使异常比率超出阈值也不会熔断 + "timeWindow": 10, // 熔断时长,单位为 s + "statIntervalMs": 1000 // 统计时长(单位为 ms),如 60*1000 代表分钟级 + } +] diff --git a/script/sentinel/system-server/system-server-flow-rules.json b/script/sentinel/system-server/system-server-flow-rules.json new file mode 100644 index 000000000..3b07d3d7b --- /dev/null +++ b/script/sentinel/system-server/system-server-flow-rules.json @@ -0,0 +1,14 @@ +[ + { + "resource": "/flow-test", // 资源名 + "limitApp": "default", // // 针对来源,若为 default 则不区分调用来源 + "grade": 1, // 限流阈值类型(1:QPS; 0:并发线程数) + "count": 1, // 阈值 + "clusterMode": false, // 是否是集群模式 + "controlBehavior": 0, // 流控效果 (0:快速失败; 1:Warm Up(预热模式); 2:排队等待) + "strategy": 0, // 流控模式(0:直接; 1:关联; 2:链路) + "warmUpPeriodSec": 10, // 预热时间(秒,预热模式需要此参数) + "maxQueueingTimeMs": 500, // 超时时间(排队等待模式需要此参数) + "refResource": "rrr" // 关联资源、入口资源(关联、链路模式) + } +] diff --git a/script/sentinel/system-server/system-server-param-flow-rules.json b/script/sentinel/system-server/system-server-param-flow-rules.json new file mode 100644 index 000000000..ccdfd4c2b --- /dev/null +++ b/script/sentinel/system-server/system-server-param-flow-rules.json @@ -0,0 +1,18 @@ +[ + { + "resource": "/param-flow-test", + "grade": 1, // 限流模式(QPS 模式,不可更改) + "paramIdx": 0, // 参数索引 + "count": 13, // 单机阈值 + "durationInSec": 6, // 统计窗口时长 + "clusterMode": false, // 是否集群 默认false + "controlBehavior": 0, // 流控效果(支持快速失败和匀速排队模式) + "limitApp": "default", + // 高级选项 + "paramFlowItemList": [{ + "classType": "int", // 参数类型 + "count": 222, // 限流阈值 + "object": "2" // 参数值 + }] + } +] \ No newline at end of file diff --git a/script/sentinel/system-server/system-server-system-rules.json b/script/sentinel/system-server/system-server-system-rules.json new file mode 100644 index 000000000..6fb378ca0 --- /dev/null +++ b/script/sentinel/system-server/system-server-system-rules.json @@ -0,0 +1,10 @@ +[ + { + "avgRt": 1, // RT + "highestCpuUsage": -1, // CPU 使用率 + "highestSystemLoad": -1, // LOAD + "maxThread": -1, // 线程数 + "qps": -1, // 入口 QPS + "count": 55 // 阈值,在CPU使用率中是百分比 + } +] \ No newline at end of file diff --git a/yudao-gateway/pom.xml b/yudao-gateway/pom.xml index fd75115d9..df30365f0 100644 --- a/yudao-gateway/pom.xml +++ b/yudao-gateway/pom.xml @@ -69,6 +69,24 @@ com.google.guava guava + + + + com.alibaba.cloud + spring-cloud-alibaba-sentinel-gateway + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + com.alibaba.csp + sentinel-datasource-nacos + diff --git a/yudao-gateway/src/main/resources/application-local.yaml b/yudao-gateway/src/main/resources/application-local.yaml index a7132bd6f..1b3a92c64 100644 --- a/yudao-gateway/src/main/resources/application-local.yaml +++ b/yudao-gateway/src/main/resources/application-local.yaml @@ -13,6 +13,53 @@ spring: namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP +--- #################### Sentinel相关配置 #################### +spring: + cloud: + sentinel: + enabled: true # 是否开启。默认为 true 开启 + eager: true # 是否饥饿加载。默认为 false 关闭 + transport: + dashboard: 127.0.0.1:8080 # Sentinel 控制台地址 + filter: + url-patterns: /** # 拦截请求的地址。默认为 /* + #自定义流控降级异常信息 + scg: + fallback: + mode: response + response-body: '{"code": 429, "msg":"服务压力过大,请稍后重试!"}' + # sentinel用nacos作为数据源的配置 (可导入/yudao-cloud/script/sentinel/system-server下对应规则,使用时需去掉注释) + datasource: + # 流控规则 + flow: + nacos: + server-addr: ${spring.cloud.nacos.server-addr} + namespace: ${spring.cloud.nacos.discovery.namespace} + username: ${spring.cloud.nacos.username} + password: ${spring.cloud.nacos.password} + data-id: ${spring.application.name}-gw-flow-rules # 在修改的sentinel 源码中定义的规则名 + rule-type: gw_flow + # 降级规则 + degrade: + nacos: + server-addr: ${spring.cloud.nacos.server-addr} + namespace: ${spring.cloud.nacos.discovery.namespace} + username: ${spring.cloud.nacos.username} + password: ${spring.cloud.nacos.password} + dataId: ${spring.application.name}-degrade-rules + rule-type: degrade + # 系统规则 + system: + nacos: + server-addr: ${spring.cloud.nacos.server-addr} + namespace: ${spring.cloud.nacos.discovery.namespace} + username: ${spring.cloud.nacos.username} + password: ${spring.cloud.nacos.password} + dataId: ${spring.application.name}-system-rules + groupId: DEFAULT_GROUP + data-type: json + rule-type: system + # 日志文件配置 logging: level: