Sentinel 数据持久化到 Nacos

2,142 阅读2分钟

Sentinel 规则配置,一旦我们重启服务过后,所有的规则都会消失。我们可以通过 Zookeeper , Applo , Nacos 等配置中心将这些规则配置存储起来,让服务重启或者启动多节点的时候可以共享配置数据。

之前的项目我们通过 Nacos 来作为服务注册中心和服务配置中心,我们也可以将 Nacos 作为 Sentinel 的配置数据存储仓库,来为我们提供Sentinel 配置数据的持久化。入下图所示

增加 Nacos 存储依赖

需要独立引入如下依赖,来申明 sentinel 的规则数据存储在 nacos 中。

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

添加 YML 配置

我们如果使用 Sentinel 的独立数据源功能,那么需要在 yaml 文件中申明数据源配置信息。

spring:
  application:
    name: stock-service
  profiles:
    active: dev
  cloud:
    sentinel:
      transport:
        port: 8719
        dashboard: localhost:8080
      enabled: true
      datasource:
        ds:
          nacos:
            dataId: ${spring.application.name}-flow-rules
            groupId: DEFAULT_GROUP
            data‐type: json
            rule‐type: flow

Nacos 增加配置

在 Nacas 配置中心,我们需要添加配置信息,这里需要注意 dataId 和 groupId 一定不要搞错,不然会导致找不到数据配置,入下图所示:

数据模板

[  {    "resource": "abc",    "controlBehavior": 0,    "count": 20.0,    "grade": 1,    "limitApp": "default",    "strategy": 0  }]

Sentinel 查看配置

最后我们启动服务, 和 Sentinel 控制台,可以在流控信息这个菜单下面查看到我们在配置中心定义的流控信息。

总结

至此我们就完成了,Sentinel 对规则持久化到 Nacos 的全部操作。这里有一个小小的问题就是我们在 Sentinel 修改规则过后不能直接同步到 Nacos 中进行持久化,如果需要持久化到 Nacos 中的可以修改 Sentinel 控制台的源码将配置信息通过 “推模式”同步到 Nacos 中存储。

Sentinel 提供了 Nacos、ZooKeeper 和 Apollo 的推送和拉取规则实现示例(位于test目录下)。以 Nacos 为例,若希望使用 Nacos 作为动态规则配置中心,用户可以提取出相关的类,然后只需在FlowControllerV2中指定对应的 bean 即可开启 Nacos 适配。前端页面需要手动切换,或者修改前端路由配置(sidebar.html流控规则路由从dashboard.flowV1改成dashboard.flow即可,注意簇点链路页面对话框需要自行改造)。

参考

github.com/alibaba/Sen…