springboot集成Sentinel & Nacos「持久化」

971 阅读2分钟

在入门 Sentinel 流控的时候,每次重启 Sentinel 服务端或者客户端,在服务端配置的流控的规则都消失了,感觉每次的重启都会重置。

原来默认的情况下,不论是服务端中的配置还是客户端中的配置,都是在内存中存储,一点重启,这些配置过的规则都消失了。

于是,脑海中便浮现出「持久化」这个词,随后了解了Sentinel 有多种方式实现持久化,一种是可通过注册中心,如Nacos实现配置持久化,下面简单实现 Sentinel 的 Nacos持久化。

一、Nacos配置中心

Nacos的配置中心的使用参考:Springboot集成Nacos2「配置中心」

新增配置中心文件 sentinel-service.json ,选择默认命名空间 public

[
    {
		"resource": "test/12",
		"limitApp": "default",
		"grade": 1,
		"count": 2,
		"strategy": 0,
		"controlBehavior": 0,
		"clusterMode": false
    }
]

resource:资源名,即限流规则的作用对象 limitApp:流控针对的调用来源,若为 default 则不区分调用来源 grade:限流阈值类型(QPS 或并发线程数);0代表根据并发数量来限流,1代表根据QPS来进行流量控制 count:限流阈值 strategy:调用关系限流策略 controlBehavior:流量控制效果(直接拒绝、Warm Up、匀速排队) clusterMode:是否为集群模式

二、Sentinel 客户端

开发环境

  • Spring Boot : 2.1.12.RELEASE
  • Spring Cloud :Greenwich.SR5
  • Spring Cloud Alibaba : 2.1.2.RELEASE

1. 引入POM依赖

 <dependency>
      <groupId>com.alibaba.csp</groupId>
      <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

2. application.yml 配置

server:
  port: 8002
  servlet:
    context-path: /springboot-sentinel-client-b
spring:
  application:
    name: springboot-sentinel-client-b
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080
      eager: true
      #将sentinel配置信息持久化到nacos
      datasource:
        ds:
          nacos:
            server-addr: localhost:8848
            data_id: sentinel-service.json
            group-id: DEFAULT_GROUP
            data-type: json
            rule-type: flow

启动后,访问:http://localhost:8080/#/dashboard/flow/springboot-sentinel-client-b

3. 注意事项

  • 如果 Sentinel 控制台配置了规则或修改了参数,不会同步到Nacos。
  • Nacos里需要修改了值,会立马同步到 Sentinel 里。
  • 如果有自定义的加载,则不会从Nacos里加载策略信息。

springboot集成Sentinel DEMO: gitee.com/renxiaoshi/…