10. SpringCloud Alibaba Sentinel 规则持久化部署详细剖析

10. SpringCloud Alibaba Sentinel 规则持久化部署详细剖析

文章目录

  • [10. SpringCloud Alibaba Sentinel 规则持久化部署详细剖析](#10. SpringCloud Alibaba Sentinel 规则持久化部署详细剖析)
  • [1. 规则持久化](#1. 规则持久化)
    • [1.1 Nacos Server 配置中心-规则持久化实例](#1.1 Nacos Server 配置中心-规则持久化实例)
  • [2. 最后:](#2. 最后:)

1. 规则持久化

规则没有持久化的问题

如果 sentinel 流控规则没有持久化,当重启调用 API/接口 所在微服务后,规则就会丢失,需要 重新加入。

解决方案:通过 Nacos 进行持久化

规则持久化方案:

  • 在 Nacos Server 配置规则, 完成持久化 -官方推荐:将规则持久化到本地文件, 定时同步

1.1 Nacos Server 配置中心-规则持久化实例

需求:

  1. member-service-nacos-consumer-80 微 服务的 /member/openfeign/consumer/get/1 API 接口添加流控规则 QPS=1/快速失败 .

  2. 要求将该流控规则加入到 nacos server 配置中心,实现持久化

代码+配置实现步骤:

  1. 在 Nacos Server 配置中心增加 Sentinel 客户端/微服务模块的流控规则。
json 复制代码
[
    {
        "resource": "/member/openfeign/consumer/get/1",
        "limitApp": "default",
        "grade": 1,
        "count": 1,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]
tex 复制代码
在 Nacos Server  配置中心增加 Sentinel 客户端/微服务模块  的流控规则参数说明
    resource∶资源名称;
    limlitApp∶  来源应用;
    grade∶阈值类型,0表示线程数,1表示QPS;
    count∶单机阈值;
    strategy∶流控模式,0表示直接,1表示关联,2表示链路;
    controlBehavior∶流控效果,0表示快速失败,1表示Warm Up,2表示排队等待;
    clusterMode∶是否集群

修改 member-service-nacos-consumer-80 的 pom.xml, 加入 sentinel 和 nacos 持久化整合依赖

xml 复制代码
<!--        引入 sentinel 和 nacos 持久化整合依赖,使用版本仲裁-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>

修改 member-service-nacos-consumer-80 的 application.yml , 配置该微服务从 Nacos Server 获取流控规则

在application.yaml 当中配置 rule-typle 规则:

yaml 复制代码
      datasource:
        ds1:
          # 流控规则配置是从 nacos server 配置中心获取
          nacos:
            server-addr: localhost:8848 # 指定 nacos server 配置中心地址
            dataId: member-service-nacos-consumer # nacos server 配置中心当中对应的ID保持一致,一定要保持一致才行
            groupId: DEFAULT_GROUP # 指定组[nacos server配置中心]
            data-type: json # 指定配置流控规则的数据类型
            rule-type: flow # 规则类型:流控规则 表示可以看文档

 rule-type: flow # 规则类型:流控规则 表示可以看文档 有:flow流量控制,degrade熔断降级规则,system系统保护规则,authority 访问控制规则
yaml 复制代码
spring:
  application:
    name: member-service-nacos-consumer-80
  #配置 nacos 注册中心
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # 配置 nacos server的地址
    sentinel:
      transport:
        dashboard: localhost:9090 # 指定 sentinel 控制台地址(dash board)
        port: 8719 # 设置端口默认是 8719 如果该端口被占用,就自动从8791+1进行扫描,直到找到一个没有占用的端口.
      datasource:
        ds1:
          # 流控规则配置是从 nacos server 配置中心获取
          nacos:
            server-addr: localhost:8848 # 指定 nacos server 配置中心地址
            dataId: member-service-nacos-consumer # nacos server 配置中心当中对应的ID保持一致,一定要保持一致才行
            groupId: DEFAULT_GROUP # 指定组[nacos server配置中心]
            data-type: json # 指定配置流控规则的数据类型
            rule-type: flow # 规则类型:流控规则 表示可以看文档

测试

浏览器: ht启动 Nacos Server 8848

启动 Sentinel8080 控制台/Sentinel dashboard

启动 member-service-nacos-provider-10004/10006

启动 member-service-nacos-consumer-80tp://localhost/member/openfeign/consumer/get/1

  1. 浏览器输入: http://localhost/member/openfeign/consumer/get/1 , 目前是 Openfeign 调用(负载均衡), 而且流控规则已经生效了.


2. 注意看 sentinel, 这个流控规则已经生成了



3. 查看 Sentinel 控制台 发现已经同步了流控规则

注意事项和细节:

  1. 在 nacos server 配置 sentinel 流控规则的 Data ID 也可以自己指定,比如写成 hsp-id, 只要在 sentinel client/微服务 的 applicaion.yml 的 datasource.ds1.nacos.dataId 的值保持一致即可。

2. 最后:

"在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。"

相关推荐
夏天的味道٥4 小时前
使用 Java 执行 SQL 语句和存储过程
java·开发语言·sql
冰糖码奇朵5 小时前
大数据表高效导入导出解决方案,mysql数据库LOAD DATA命令和INTO OUTFILE命令详解
java·数据库·sql·mysql
好教员好5 小时前
【Spring】整合【SpringMVC】
java·spring
浪九天6 小时前
Java直通车系列13【Spring MVC】(Spring MVC常用注解)
java·后端·spring
小斌的Debug日记7 小时前
框架基本知识总结 Day16
redis·spring
堕落年代7 小时前
Maven匹配机制和仓库库设置
java·maven
m0_748246877 小时前
maven导入spring框架
数据库·spring·maven
功德+n7 小时前
Maven 使用指南:基础 + 进阶 + 高级用法
java·开发语言·maven
香精煎鱼香翅捞饭7 小时前
java通用自研接口限流组件
java·开发语言
ChinaRainbowSea8 小时前
Linux: Centos7 Cannot find a valid baseurl for repo: base/7/x86_64 解决方案
java·linux·运维·服务器·docker·架构