Loading

sentinel持久化配置

1.Sentinel规则持久化到Nacos

在Sentinel Dashboard中配置规则后如果应用重启那么之前配置好的规则就会丢失,所以实际生产环境中需要将配置规则的持久化,Sentinel提供多种不同的数据源来持久化规则配置,包括file,redis、nacos、zk。

将限流规则持久化到Nacos保存,只要刷新应用某个接口地址,Sentinel控制台的流控规则就能感应到,同时只要Nacos里面的配置不删除,针对应用某个接口上Sentinel的流控规则就持续有效。

image

其实就是实现Sentinel Dashboard与Nacos之间的相互通信

通过Nacos配置文件修改流控规则---拉取--->Sentinel Dashboard界面显示最新的流控规则

注意:在Nacos控制台上修改流控制,虽然可以同步到Sentinel Dashboard,但是Nacos此时应该作为一个流控规则的持久化平台,所以正常操作过程应该是开发者在Sentinel Dashboard上修改流控规则后同步到Nacos,遗憾的是目前Sentinel Dashboard不支持该功能。

2.具体操作

引入依赖:

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

配置yml:

server:
port: 8401

spring:
main:
 allow-circular-references: true
application:
 name: sentinel-service-8401
cloud:
 nacos:
   discovery:
   	# nacos注册中心地址
     server-addr: 192.168.56.10:3333
 sentinel:
   transport:
     # 配置Sentinel dashboard地址
     dashboard: localhost:8080
     # 默认8719端口,键入被占用会自动从8719+1,直到找到未被占用的端口
     port: 8719
   datasource: # 配置Sentinel的持久化
     ds:
       nacos:
         serverAddr: 192.168.56.10:3333
         groupId: DEFAULT_GROUP
         dataId: test-sentinel.json
         ruleType: flow

进入到Nacos控制台添加配置:

image

具体配置内容:

[   
 {
     "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:是否集群。

启动类加入:@EnableDiscoveryClient注解

控制类:

@RestController
public class OrderController {
 @GetMapping("/order/test1")
 @SentinelResource(value = "test1")
 public String test1() throws InterruptedException {
     return "test1 ";
 }
}

测试:

当我们重启项目以后,我们访问对应接口http://localhost:8890/order/test1,就会在Sentinel界面上看到对应的限流规则:

image

posted @ 2022-05-21 10:03  ZT丶  阅读(246)  评论(0编辑  收藏  举报