Sentinel 规则 持久化到Nacos
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的轻量级流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护等多个维度来帮助您保障微服务的稳定性。
什么是推模式
规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。

正式开始搞
先创建一个Spring boot demo
添加sentinel maven依赖
1
2
3
4
5
6
7
8
9
10
11<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<version>1.7.1</version>
</dependency>
- 添加配置yml
1 | server: |
Sentinel控制台改造
先去github下载源码 https://github.com/alibaba/Sentinel
- 打开我们刚才下载的sentinel,到sentinel-dashboard 修改pom.xml
修改前
修改后
- 找到sentinel-dashboard/src/test/java/com/alibaba/csp/sentinel/dashboard/rule/nacos目录,将整个目录拷贝到sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos,如图:

- 修改 NacosConfig 就是我们上面一步复制的nacos文件夹下面的 ,这里主要是配置Nacos地址
1 | /** |
还有要给 application.properties加上
1
2 # 这是本地运行,生产看自己情况更改
nacos.address=127.0.0.1:8848
修改com.alibaba.csp.sentinel.dashboard.controller.v2.FlowControllerV2 ,找到
1
2
3
4
5
6
private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;修改为
1
2
3
4
5
6
private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;修改sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/sidebar/sidebar.html,找到
1
2
3
4<li ui-sref-active="active" ng-if="!entry.isGateway">
<a ui-sref="dashboard.flowV1({app: entry.app})">
<i class="glyphicon glyphicon-filter"></i> 流控规则</a>
</li>修改为
1
2
3
4<li ui-sref-active="active" ng-if="!entry.isGateway">
<a ui-sref="dashboard.flow({app: entry.app})">
<i class="glyphicon glyphicon-filter"></i> 流控规则-Nacos</a>
</li>修改src\main\webapp\resources\app\scripts\controllers\下的identity.js 这里的是修改 簇点链路,把FlowServiceV1 改成FlowServiceV2

初步的Flow 限流改造完毕,下面我们看看效果
启动Nacos nacos要配置持久化,这是地址 https://www.cnblogs.com/larscheng/p/11422909.html, 启动我们改造好的Sentinel
- 来看看sentinel

- 来到我们的项目demo,写一个接口返回信息用于测试限流,然后启动demo

- 然后我们刷新Sentinel,可以看到我们刚才启动的demo,我们用apipost请求我们demo的接口

- 刷新Sentinel,进入簇点链路,这里可以很清晰的看到我们的接口 /flow

- 我们给这个/flow,加一个限流规则,看有没有同步到nacos 下面

- 点击限流规则-Nacos,里面已经有了一条限流规则,就是我们刚才添加的/flow

- 刷新下Nacos,我们可以看到sentinel-demo-flow-rules, 我们点击编辑看看详情,可以看到规则已经到同步到Nacos 里面


- 来测试下限流规则是否有效,因为没有用并发工具请求,我把阈值调到了1,方便测试,测试没有问题,多次快速请求,触发了Sentinel的限流

结尾
至此,Sentinel 持久化到Nacos 已经完成,但是这个并没有结束,因为还有降级规则,热点规则,系统规则,授权规则,这些都需要自己去改造才能像限流规则一样可以同步到Nacos,下一篇我会把这些改造教程写出来(一些大佬看了这个限流规则已经应该知道怎么去改其他的,下一篇主要是给萌新看)
参考链接:
https://github.com/alibaba/Sentinel/wiki
https://blog.52itstyle.vip/archives/4433/
https://www.sonake.com/2019/12/16/Sentinel-Nacos
https://blog.csdn.net/lilizhou2008/article/details/97075236