添加Maven依赖

在以前的版本中整合 Sentinel 需要手动配置。新版本中添加 spring-cloud-alibaba-sentinel-gateway 依赖就可以了,内部帮我们配置好了。可以参考: SentinelSCGAutoConfiguration

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>com.alibaba.cloud</groupId>
  7. <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  8. </dependency>

配置Sentinel

  1. spring:
  2. cloud:
  3. sentinel:
  4. # 配置Sentinel控制台
  5. transport:
  6. dashboard: localhost:8888 # Sentinel 控制台地址
  7. # 如果需要配置Sentinel全局异常处理,可以添加以下配置
  8. scg:
  9. fallback:
  10. mode: response # 重定向(redirect 或者 响应(response
  11. # redirect: # mode redirect 时,设置重定向URL
  12. response-status: 200 # 响应状态码
  13. response-body: "{code: 500, msg: '服务器压力山大,请稍后再试!'}" # 响应内容体

配置规则

配置规则有多种方式

1.代码中通过Bean的初始化来配置。
2.通过控制台配置
3.集成配置中心进行配置

代码中配置

  1. @Configuration
  2. public class GatewayFlowRuleConfig {
  3. /**
  4. * 初始化网关流控规则
  5. */
  6. @PostConstruct
  7. public void init() {
  8. Set<GatewayFlowRule> rules = new HashSet<>();
  9. rules.add(new GatewayFlowRule()
  10. .setResourceMode(SentinelGatewayConstants.RESOURCE_MODE_ROUTE_ID) // 模式
  11. .setResource("user_route") // 资源名,gateway网关路由
  12. .setGrade(RuleConstant.FLOW_GRADE_QPS) // 流控类型 QPS、线程数
  13. .setCount(3) // 间隔时间内最大请求次数
  14. .setIntervalSec(1L) // 间隔时间
  15. .setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT) // 流控方式 默认快速失败
  16. .setBurst(0) // 超过最大请求次数,还能容忍多少个请求通过
  17. );
  18. GatewayRuleManager.loadRules(rules);
  19. }
  20. }

控制台中配置

控台配置比较直观,方便。缺点就是不能持久化,只要服务重启规则就没有了。控制台规则持久化,可以查看如果持久化。
image.png

配置中心配置规则

这里以 Nacos 为例

添加Maven依赖

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>com.alibaba.cloud</groupId>
  7. <artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId>
  8. </dependency>
  9. <dependency>
  10. <groupId>com.alibaba.csp</groupId>
  11. <artifactId>sentinel-datasource-nacos</artifactId>
  12. </dependency>

配置Sentinel Datasource

  1. spring:
  2. cloud:
  3. sentinel:
  4. datasource:
  5. # 名称自定义
  6. gateway-flow-rule:
  7. nacos:
  8. server-addr: ${spring.cloud.nacos.discovery.server-addr}
  9. namespace: ${spring.cloud.nacos.discovery.namespace}
  10. group-id: SENTINEL_GATEWAY_FLOW_GROUP
  11. data-id: ${spring.application.name}-gateway-flow-rules.json
  12. # 配置网关的流控规则一定要设置成 gw-flowflow 是普通流控规则。
  13. rule-type: gw-flow # 设置 gateway flow 流控规则类型

Nacos添加规则配置
创建Nacos配置文件,命名空间、groupId、dataId与上面配置一致。
配置参数参考代码中配置规则类 GatewayFlowRule

  1. [
  2. {
  3. "app": "gateway-server",
  4. "burst": 0,
  5. "controlBehavior": 0,
  6. "count": 5.0,
  7. "grade": 1,
  8. "interval": 1,
  9. "intervalUnit": 0,
  10. "maxQueueingTimeoutMs": 500,
  11. "resource": "user_route",
  12. "resourceMode": 0
  13. }
  14. ]

重启项目,Nacos中的规则配置在控制台就能看到了。

image.png