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

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

相关推荐
栈与堆5 分钟前
LeetCode-1-两数之和
java·数据结构·后端·python·算法·leetcode·rust
OC溥哥99920 分钟前
Paper MinecraftV3.0重大更新(下界更新)我的世界C++2D版本隆重推出,拷贝即玩!
java·c++·算法
星火开发设计23 分钟前
C++ map 全面解析与实战指南
java·数据结构·c++·学习·算法·map·知识
*才华有限公司*26 分钟前
RTSP视频流播放系统
java·git·websocket·网络协议·信息与通信
gelald37 分钟前
ReentrantLock 学习笔记
java·后端
计算机学姐1 小时前
基于SpringBoot的校园资源共享系统【个性化推荐算法+数据可视化统计】
java·vue.js·spring boot·后端·mysql·spring·信息可视化
一条咸鱼_SaltyFish1 小时前
[Day15] 若依框架二次开发改造记录:定制化之旅 contract-security-ruoyi
java·大数据·经验分享·分布式·微服务·架构·ai编程
跟着珅聪学java1 小时前
JavaScript 底层原理
java·开发语言
廋到被风吹走1 小时前
【Spring】Spring Boot 配置管理深度指南:Profile、类型安全与加密
spring boot·安全·spring
Mr. Cao code1 小时前
Docker数据管理:持久化存储最佳实践
java·docker·容器