我们首先需要知道:在Sentinel Dashboard中配置规则之后重启应用就会丢失,所以实际生产环境中需要配置规则的持久化实现,Sentinel提供多种不同的数据源来持久化规则配置,包括file,redis、nacos、zk。
Sentinel规则持久化到Nacos
将限流规则持久化进Nacos保存,只要刷新8401某个接口地址,Sentinel控制台的流控规则就能感应到,同时只要Nacos里面的配置不删除,针对8401上Sentinel的流控规则就持续有效。
其实就是实现Sentinel Dashboard与Nacos之间的相互通信
通过Nacos配置文件修改流控规则—拉取—>Sentinel Dashboard界面显示最新的流控规则
注意:在Nacos控制台上修改流控制,虽然可以同步到Sentinel Dashboard,但是Nacos此时应该作为一个流控规则的持久化平台,所以正常操作过程应该是开发者在Sentinel Dashboard上修改流控规则后同步到Nacos,遗憾的是目前Sentinel Dashboard不支持该功能。
具体操作
第一件事情我们首先要引入依赖:
1 2 3 4 5
| <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> <version>1.8.1</version> </dependency>
|
第二件事情我们需要配置YML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| # 端口号 server: port: 8890 # 服务名 spring: application: name: order cloud: nacos: discovery: # nacos注册中心地址 server-addr: localhost:8848 sentinel: transport: dashboard: localhost:8080 datasource: # 配置Sentinel的持久化 nacos: nacos: serverAddr: localhost:8848 groupId: DEFAULT_GROUP dataId: order-sentinel.json ruleType: flow profiles: active: dev
|
第三步我们需要进入到Nacos控制台,添加配置
具体配置内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| [ { "resource": "test1", "limitApp": "default", "grade": 1, "count": 2, "strategy": 0, "controlBehavior": 0 "clusterMode": false } ] ---------------具体内容含义----------------- resource:资源名称; limitApp:来源应用; grade:阈值类型,0表示线程数,1表示QPS; count:单机阈值; strategy:流控模式,0表示直接,1表示关联,2表示链路; controlBehavior:流控效果,0表示快速失败,1表示Warm Up,2表示排队等待; clusterMode:是否集群。
|
控制器
1 2 3 4 5 6 7 8
| @RestController public class OrderController { @GetMapping("/order/test1") @SentinelResource(value = "test1") public String test1() throws InterruptedException { return "test1 "; } }
|
测试
当我们重启项目以后,我们访问对应接口http://localhost:8890/order/test1,就会在Sentinel界面上看到对应的限流规则: