1. 前言
相关文章:
- 《微服务轮子项目(16) -Alibaba Sentinel限流熔断(使用示例)》
- 《微服务轮子项目(17) -Alibaba Sentinel限流熔断(动态规则扩展)》
- 《微服务轮子项目(18) -Alibaba Sentinel限流熔断(生产应用)》
Sentinel 网关流控支持针对不同的路由和自定义的 API 分组进行流控,支持针对请求属性(如 URL 参数,Client IP,Header 等)进行流控。Sentinel 1.6.3 引入了网关流控控制台的支持,用户可以直接在 Sentinel 控制台上查看 API Gateway 实时的 route 和自定义 API 分组监控,管理网关规则和 API 分组配置。
2. 功能接入
2.1 网关添加sentinel相关的jar依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId> </dependency>
2.2 网关zuul的sentinel配置
spring: # sentinel动态配置规则 cloud: sentinel: zuul: enabled: true order: pre: 2000 post: 500 error: -100 filter: enabled: false datasource: # 限流 ds1: nacos: server-addr: ${zlt.nacos.server-addr} dataId: ${spring.application.name}-sentinel-gw-flow groupId: DEFAULT_GROUP rule-type: gw-flow # api分组 ds2: nacos: server-addr: ${zlt.nacos.server-addr} dataId: ${spring.application.name}-sentinel-gw-api-group groupId: DEFAULT_GROUP rule-type: gw-api-group
绑定gw-flow(限流)和gw-api-group(api分组)的规则数据源为nacos
并指定nacos上对应的dataId和groupId
2.3 nacos规则配置
2.3.1 限流配置gw-flow
- Data ID:api-gateway-sentinel-gw-flow
- Group:DEFAULT_GROUP
- 配置内容:
[ { "resource": "user", "count": 0, "paramItem": { "parseStrategy": 3, "fieldName": "name" } }, { "resource": "uaa_api", "count": 0 } ]
规则1:所有user的请求只要参数带有name的都拦截(qps=0),user为zuul路由配置上的routeId
规则2:api分组为uaa_api的所有请求都拦截(qps=0)
2.3.2 api分组配置gw-api-group
- Data ID:api-gateway-sentinel-gw-api-group
- Group:DEFAULT_GROUP
- 配置内容:
[ { "apiName": "uaa_api", "predicateItems": [ { "pattern": "/user/login" }, { "pattern": "/api-uaa/oauth/**", "matchStrategy": 1 } ] } ] • 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8 • 9 • 10 • 11 • 12 • 13 • 14
上面配置意思为满足规则的api都统一分组为uaa_api
分组规则1:精准匹配/user/login
分组规则2:前缀匹配/api-uaa/oauth/**
2.4 网关zuul启动参数
需要在接入端原有启动参数的基础上添加-Dcsp.sentinel.app.type=1
启动以将您的服务标记为API Gateway
,在接入控制台时您的服务会自动注册为网关类型,然后您即可在控制台配置网关规则和API
分组,例如:
java -Dcsp.sentinel.app.type=1 -jar zuul-gateway.jar • 1
3. sentinel控制台管理
API管理(分组)
网关流控规则
4. 测试限流api
4.1 测试限流规则1
所有user
的请求只要参数带有name
的都拦截(qps=0
):
- 不加name参数,可以访问api
- 后面加上name参数,请求被拦截
4.2 测试限流规则2
api分组为uaa_api的所有请求都拦截(qps=0)
- 前缀匹配
/api-uaa/oauth/**
- 精准匹配
/user/login