SpringCloudAlibaba:Sentinel使用nacos进行持久化

x33g5p2x  于2021-10-28 转载在 Spring  
字(3.5k)|赞(0)|评价(0)|浏览(863)

一、Sentinel持久化介绍

Sentinel自身就支持了多种不同的数据源来持久化规则配置,目前包括以下几种方式:

  • 文件配置
  • Nacos配置
  • ZooKeeper配置
  • Apollo配置

这里我们整合的配置中心Nacos存储限流规则。

二、准备工作

下面我们将同时使用到NacosSentinel Dashboard,所以可以先把NacosSentinel Dashboard启动起来。

默认配置下启动后,它们的访问地址(后续会用到)为:

  • Nacos:192.168.31.100:8848/nacos/
  • Sentinel Dashboard:192.168.31.100:8858/

三、整合nacos存储规则

1.pom文件

  1. <dependencies>
  2. <!--sentinel nacos-->
  3. <dependency>
  4. <groupId>com.alibaba.csp</groupId>
  5. <artifactId>sentinel-datasource-nacos</artifactId>
  6. <version>1.8.2</version>
  7. </dependency>
  8. <!--sentinel-->
  9. <dependency>
  10. <groupId>com.alibaba.cloud</groupId>
  11. <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  12. <version>2.2.1.RELEASE</version>
  13. </dependency>
  14. <!--spring cloud alibaba-->
  15. <dependency>
  16. <groupId>com.alibaba.cloud</groupId>
  17. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  18. <version>2.1.0.RELEASE</version>
  19. </dependency>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-web</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-starter-actuator</artifactId>
  27. </dependency>
  28. </dependencies>

2.bootstrap.yml

这里必须为bootstrap格式,不然获取不到数据

  1. server:
  2. port: 8005
  3. spring:
  4. application:
  5. name: sentinel-nacos
  6. cloud:
  7. nacos:
  8. discovery:
  9. server-addr: 192.168.31.100:8848 #这里是我linux地址
  10. sentinel:
  11. transport:
  12. #配置sentinel地址,端口
  13. dashboard: 192.168.31.100:8859 #这里是我linux地址
  14. #客户端IP(sentinel dashboard进行实时监控的主机ip地址)
  15. # 默认端口8719端口假如被占用会自动从8719开始依次+1扫描,直到找到未被占用的端口
  16. port: 8719
  17. client-ip: 172.100.20.220 #这里是我windows地址
  18. datasource:
  19. flow:
  20. nacos:
  21. server-addr: ${spring.cloud.nacos.discovery.server-addr}
  22. groupId: DEFAULT_GROUP
  23. dataId: ${spring.application.name}
  24. rule-type: flow
  25. data-type: json
  26. authority:
  27. nacos:
  28. server-addr: ${spring.cloud.nacos.config.server-addr}
  29. dataId: ${spring.application.name}-authority-rules
  30. groupId: DEFAULT_GROUP
  31. data-type: json
  32. rule-type: authority
  33. degrade:
  34. nacos:
  35. server-addr: ${spring.cloud.nacos.config.server-addr}
  36. dataId: ${spring.application.name}-degrade-rules
  37. groupId: DEFAULT_GROUP
  38. data-type: json
  39. rule-type: degrade
  40. param-flow:
  41. nacos:
  42. server-addr: ${spring.cloud.nacos.config.server-addr}
  43. dataId: ${spring.application.name}-param-flow-rules
  44. groupId: DEFAULT_GROUP
  45. data-type: json
  46. rule-type: param-flow
  47. system:
  48. nacos:
  49. server-addr: ${spring.cloud.nacos.config.server-addr}
  50. dataId: ${spring.application.name}-system-rules
  51. groupId: DEFAULT_GROUP
  52. data-type: json
  53. rule-type: system
  54. #暴露自己的端点
  55. management:
  56. endpoints:
  57. web:
  58. exposure:
  59. include: '*'

3.nacos添加配置

这里的dataId,还有Group要和上面的bootstrap.yml的内容一样

json串

  1. [{
  2. "resource": "hello",
  3. "limitApp": "default",
  4. "grade": 1,
  5. "count": 1,
  6. "strategy": 0,
  7. "controlBehavior": 0,
  8. "clusterMode": false
  9. }]

参数解析

  1. resource:资源名称;
  2. IimitApp:来源应用;
  3. grade:國值类型,0表示线程数,1表示QPS;
  4. count:单机阈值
  5. strategy:流控模式,0表示直接,1表示关联,2表示链路
  6. controlbehavior:流控效果,0表示快速失败,1表示 Warm Up,2表示排队等待;
  7. cluster Mode:是否集群。

4.修改Controller

  1. @RestController
  2. @Slf4j
  3. public class SentinelController {
  4. @GetMapping("/hello")
  5. @SentinelResource(value = "hello",blockHandler = "helloBlockHandler")
  6. public String hello(){
  7. log.info("hello");
  8. return "hello";
  9. }
  10. public String helloBlockHandler(BlockException e){
  11. return "CustomerController invoke blockHandler";
  12. }
  13. }

5.启动主程序

  1. http://127.0.0.1:8005/hello

6.测试

频繁访问后:

四、注意点

Sentinel控制台修改规则:仅存在于服务的内存中,不会修改Nacos中配置值,重启后恢复原来的值 Nacos控制台修改规则:Nacos持久化规则,服务的内存也同步更新

相关文章