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. 最后:

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

相关推荐
喵手12 分钟前
如何利用Java的Stream API提高代码的简洁度和效率?
java·后端·java ee
-Xie-14 分钟前
Maven(二)
java·开发语言·maven
IT利刃出鞘26 分钟前
Java线程的6种状态和JVM状态打印
java·开发语言·jvm
天天摸鱼的java工程师1 小时前
Java 解析 JSON 文件:八年老开发的实战总结(从业务到代码)
java·后端·面试
白仑色1 小时前
Spring Boot 全局异常处理
java·spring boot·后端·全局异常处理·统一返回格式
喵手1 小时前
反射机制:你真的了解它的“能力”吗?
java·后端·java ee
kaika12 小时前
告别复杂配置!使用 1Panel 运行环境功能轻松搭建 Java 应用
java·1panel·建站·halo
有梦想的攻城狮2 小时前
Java 11中的Collections类详解
java·windows·python·java11·collections
六千江山2 小时前
从字符串中提取符合规则的汽车车牌
java
33255_40857_280592 小时前
从韩立结婴看Java进阶:一个10年老码农的修仙式成长指南
java