pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
</dependencies>
yml
spring:
main:
web-application-type: reactive
# jackson时间格式化
jackson:
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
enabled: true
mvc:
throw-exception-if-no-handler-found: true
pathmatch:
matching-strategy: ANT_PATH_MATCHER
application:
name: gy-gateway #服务名
cloud:
nacos:
discovery:
server-addr: 10.147.19.9:8848
namespace: 23d5be0c-46cb-40b2-bf39-bf73b058de76
config:
group: DEFAULT_GROUP
server-addr: 10.147.19.9:8848
namespace: 23d5be0c-46cb-40b2-bf39-bf73b058de76
import-check:
enabled: false
gateway:
# enabled: true
discovery:
locator:
enabled: true
lower-case-service-id: true #忽略服务名的大小写
sentinel:
filter:
enabled: false #false防止出现接口的资源
transport:
dashboard: 10.147.19.9:9090
datasource:
GW-FLOW: #任意取名, 流控规则
nacos:
server-addr: 10.147.19.9:8848
namespace: 23d5be0c-46cb-40b2-bf39-bf73b058de76
data-id: sentinel.json
data-type: json
rule-type: gw-flow
api: #任意取名, api管理
nacos:
server-addr: 10.147.19.9:8848
namespace: 23d5be0c-46cb-40b2-bf39-bf73b058de76
data-id: sentinel_api.json
data-type: json
rule-type: gw-api-group
nacosConfig
流控规则 sentinel.json
[{
"resource": "测试",
"resourceMode": 1,
"limitApp": "default",
"grade": 1,
"count": 2,
"strategy": 0,
"controlBehavior": 0
}]
api管理 sentinel_api.json
[{
"apiName":"测试",
"predicateItems": [
{
"pattern": "/good/sys/category/getTreeList",
"matchStrategy":0 #0-精准,1-前缀,2-正则
}
]
}]
JSON持久化参数含义
网关流控规则(gw-flow)参数含义
com.alibaba.csp.sentinel.adapter.gateway.common.rule;
[{
"resource": "测试", # api名称,写请求链路的api名称或者api分组的api名称
"resourceMode": 1, # api类型 0-Route ID, 1-api分组,
"grade": 1, # 限流阈值类型(1-QPS, 0-并发线程数)
"count": 2, #阈值
"intervalSec":1, #间隔单位是秒,默认是 1 秒。
"controlBehavior": 0, # 流量整形的控制效果,同限流规则的 controlBehavior 字段,目前支持0-快速失败和1-匀速排队两种模式,默认是快速失败。(代码常量里还有2-CONTROL_BEHAVIOR_RATE_LIMITER,3-CONTROL_BEHAVIOR_WARM_UP_RATE_LIMITER选项,不知道支不支持)
"burst": 0, #应对突发请求时额外允许的请求数目,对应Burst size
"maxQueueingTimeoutMs":500, #匀速排队模式下的最长排队时间,单位是毫秒,仅在匀速排队模式下生效。
"paramItem":{ #参数限流配置。若不提供,则代表不针对参数进行限流,该网关规则将会被转换成普通流控规则;否则会转换成热点规则
"index":1,
"parseStrategy":1, #从请求中提取参数的策略,目前支持提取 0-来源 IP(PARAM_PARSE_STRATEGY_CLIENT_IP)、1-Host(PARAM_PARSE_STRATEGY_HOST)、2-任意 Header(PARAM_PARSE_STRATEGY_HEADER)和 3-任意 URL 参数(PARAM_PARSE_STRATEGY_URL_PARAM)四种模式(常量里还有4-PARAM_PARSE_STRATEGY_COOKIE,可能是普通流控用的,网关流控用用不了)。
"fieldName":"1", #若提取策略选择 Header 模式或 URL 参数模式,则需要指定对应的 header 名称或 URL 参数名称。
"pattern":"1", #参数值的匹配模式,只有匹配该模式的请求属性值会纳入统计和流控;若为空则统计该请求属性的所有值。(1.6.2 版本开始支持) 这参数不确定,官方文档里没写能填什么,或者我没找到,可能和matchStrategy一样
"matchStrategy":1, #参数值的匹配策略,目前支持0-精确匹配(PARAM_MATCH_STRATEGY_EXACT)、3-子串匹配(PARAM_MATCH_STRATEGY_CONTAINS)和2-正则匹配(PARAM_MATCH_STRATEGY_REGEX)。(1.6.2 版本开始支持)
}
}]
api管理(gw-api-group)参数含义
com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition
[{
"apiName":"测试", #api组名
"predicateItems": [ #匹配哪些api
{
"pattern": "/good/sys/category/getTreeList", #匹配的api
"matchStrategy":0 #匹配规则0-精准,1-前缀,2-正则
}
]
}]
熔断和普通配置一样