自学内容网 自学内容网

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

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

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 客户端/微服务模块的流控规则。

在这里插入图片描述


[
    {
        "resource": "/member/openfeign/consumer/get/1",
        "limitApp": "default",
        "grade": 1,
        "count": 1,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]
在 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 持久化整合依赖

在这里插入图片描述


<!--        引入 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 规则:

      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 访问控制规则

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 调用(负载均衡), 而且流控规则已经生效了.

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

注意事项和细节:

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

在这里插入图片描述

2. 最后:

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

在这里插入图片描述


原文地址:https://blog.csdn.net/weixin_61635597/article/details/145330206

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!