赞
踩
在前面学习完Sentinel的流控规则以及Nacos时,就是最后的Sentinel持久化了。需要持久化的原因是因为每次启动Sentinel都会使之前配置的规则就清空了,这样每次都要再去设定规则显得非常的麻烦。
思路就是:将流控规则配置进Nacos服务注册中心中,这样每次启动Sentinel无需配置规则就有规则,但前提是启动完Sentinel后要先进入方法才看得到规则,因为Sentinel是懒加载机制。
- <!--SpringCloud Alibaba Sentinel-datasource-nacos 持久化技术-->
- <dependency>
- <groupId>com.alibaba.csp</groupId>
- <artifactId>sentinel-datasource-nacos</artifactId>
- <version>1.8.1</version>
- </dependency>
- @SpringBootApplication
- @EnableDiscoveryClient
- public class CloudAlibabaSentinelService {
- public static void main(String[] args) {
- SpringApplication.run(CloudAlibabaSentinelService.class, args);
- }
- }
server: port: 8401 spring: application: name: cloud-sentinel-service cloud: nacos: discovery: server-addr: localhost:8848 #Nacos服务注册中心地址 sentinel: transport: dashboard: localhost:8080 #配置 dashboard监控平台地址 port: 8719 #默认8719端口 如果被占用就自增直至找到未被占用的端口 datasource: ds1: nacos: server-addr: localhost:8848 dataId: ${spring.application.name} groupId: DEFAULT_GROUP data-type: json rule-type: flow #暴露监控断点 management: endpoint: sentinel: enabled: true endpoints: web: exposure: include: '*'
- @RestController
- public class SentinelController {
- @GetMapping("/persistence")
- @SentinelResource("persistence")
- public R persistence(){
- return new R(200,"持久化测试正常",new Payment(2022L,"testPersistence"));
- }
- }
在Java启动后登录Nacos网页可以看到服务列表已经出现刚刚写的spring.application.name
在配置列表中配置我们需要的信息。
关于JSON中的信息具体含义如下:
resource:资源名称;
limitApp:来源应用;
grade:阈值类型;0表示线程数,1表示QPS;
count:单机阈值;
strategy:流控模式;0表示直接,1表示关联,2表示链路;
controlBehavior:流控效果;0表示快速失败,1表示Warm Up,2表示排队等待;
clusterMode:是否集群。
登录Sentinel页面刷新会发现有spring.application.name,但里面空空如也。
因为Sentinel是懒加载机制,所以这时候通过网址调用我们控制层的方法。
这时候回来Sentinel监控平台上刷新就能看到流控规则,正像Nacos中配置的JSON格式一样。
到这里就证明Sentinel持久化成功了,感谢观看。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。