这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战
Spring Cloud Sentinel 整合 Nacos 实现动态流控规则,步骤如下:
-
添加Nacos数据源的maven依赖·
<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> <version>1.7.0</version> </dependency> 复制代码
- 创建一个REST接口,用于测试
@RestController @RequestMapping("/sentinel") public class SentinelController { @GetMapping(value = "/info") public String getName(){ return " Dynamic Rule"; } } 复制代码
-
在application.yml文件配置添加数据源
spring:
application:
name: spring-cloud-sentinel
cloud:
sentinel:
transport:
dashboard: 127.0.0.1:8718
datasource:
nacos:
server-addr: 127.0.0.1:8848
data-id: ${spring.applicaton.name}-dev
group-id: DEFAULT_GROUP
data-type: json
rule-type: flow
复制代码
部分参数相关说明如下:
- datasource:支持Nacos、Redis、Zookeeper、Apollo、file等,选择哪个类型的数据源对应配置对应的key
- data-id:设置成${spring.application.name} ,用于区分不同应用的配置文件
- data-type:配置项的内容格式,Spring Cloud Alibaba Sentinel 提供了JSON和XML两种内容格式,如果需要自定义内容格式,则把值设置为custom,并且converter-class指向converter类
- rule-type:数据源找那个的规则是哪种类型,有flow、degrade、gw-flow、param-flow等。
访问http://127.0.0.1:8848/nacos 进入Nacos控制台,创建流控配置规则,具体的配置信息如下:
{
"resource":"teaching-management",
"count":1000,
"grade":1,
"limitApp":"default",
"strategy":0,
"controlBehavior":0
}
复制代码
访问http://127.0.0.1:8718 进入Sentinel Dashboard,找到对应的模块菜单下的【流控规则】,可看到在Nacos上锁配置的流控规则已经被加载了
在Nacos 控制台上修改对应的流控规则后,可实时同步在Sentinel Dashboard上能查看流控规则的修改。
流控规则的动态修改有两种方式:
- 通过Nacos 控制台修改。
- 在Sentinel Dashboard上修改。
在Nacos控制台上修流控规则,可同步到Sentinel Dashboard,Nacos是一个流控规则的持久化动态修改平台,如果在Sentinel Dashboard上修改对应的流控规则应该也能同步到Nacos上,才能达到双向同步流控规则。但是Sentinel Dashboard还没能实现Sentinel Dashboard 同步流控规则到Nacos功能。