Sentinel使用Nacos存储规则

前言

Dashboard中设置的限流规则在应用重启之后会有丢失了的问题,那么这篇我们来讨论下如何持久化Sentinel的规则

使用Nacos存储限流规则

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

  • 文件配置
  • Nacos配置
  • ZooKeeper配置
  • Apollo配置
    本篇文章是为了实践使用Spring Cloud Alibaba的中整合的配置中心Nacos存储限流规则。
准备工作

NacosSentinel Dashboard启动
默认访问地址:

  • Nacos:http://localhost:8848/
  • Sentinel Dashboard:http://localhost:8080/
    可以通过端口号修改访问地址。
应用配置

第一步:在Spring Cloud应用的pom.xml中引入Spring Cloud Alibaba的Sentinel模块和Nacos存储扩展:

 <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.csp</groupId>
        <artifactId>sentinel-datasource-nacos</artifactId>
        <version>1.5.2</version>
    </dependency>
</dependencies>

第二步:在Spring Cloud应用中添加配置信息:

spring.application.name=alibaba-sentinel-datasource-nacos
server.port=8003

# sentinel dashboard
spring.cloud.sentinel.transport.dashboard=localhost:8080

# sentinel datasource nacos :http://blog.didispace.com/spring-cloud-alibaba-sentinel-2-1/
spring.cloud.sentinel.datasource.ds.nacos.server-addr=localhost:8848
spring.cloud.sentinel.datasource.ds.nacos.dataId=${spring.application.name}-sentinel
spring.cloud.sentinel.datasource.ds.nacos.groupId=DEFAULT_GROUP
spring.cloud.sentinel.datasource.ds.nacos.rule-type=flow
  • spring.cloud.sentinel.transport.dashboard :sentinel dashboard的访问地址,根据上面准备工作中启动的实例配置
  • spring.cloud.sentinel.datasource.ds.nacos.server-addr :nacos的访问地址,,根据上面准备工作中启动的实例配置
  • spring.cloud.sentinel.datasource.ds.nacos.groupId :nacos中存储规则的groupId
  • spring.cloud.sentinel.datasource.ds.nacos.dataId :nacos中存储规则的dataId
  • spring.cloud.sentinel.datasource.ds.nacos.rule-type :该参数是spring cloud alibaba升级到0.2.2之后增加的配置,用来定义存储的规则类型。所有的规则类型可查看枚举类:org.springframework.cloud.alibaba.sentinel.datasource.RuleType,每种规则的定义格式可以通过各枚举值中定义的规则对象来查看,比如限流规则可查看:com.alibaba.csp.sentinel.slots.block.flow.FlowRule
    dataId使用了${spring.application.name}变量,这样可以根据应用名来区分不同的规则配置。
    Nacos存储的具体配置类源码如下:
public class NacosDataSourceProperties extends AbstractDataSourceProperties {
	//
    private String serverAddr;
    private String groupId;
    private String dataId;

    // 阿里云的商业化产品使用

    private String endpoint;
    private String namespace;
    private String accessKey;
    private String secretKey;

}

第三步:创建应用主类,并提供一个rest接口,比如:

@SpringBootApplication
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }

    @Slf4j
    @RestController
    static class TestController {

        @GetMapping("/hello")
        public String hello() {
            return "didispace.com";
        }

    }

}

第四步:Nacos中创建限流规则的配置,比如:
Nacos配置其中:Data IDGroup就是上面第二步中配置的内容。配置格式选择JSON,并在配置内容中填入下面的内容:

[
    {
        "resource": "/hello",
        "limitApp": "default",
        "grade": 1,
        "count": 5,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]

上面配置规则是一个数组类型,数组中的每个对象是针对每一个保护资源的配置对象,每个对象中的属性解释如下:

  • resource:资源名,即限流规则的作用对象
  • limitApp:流控针对的调用来源,若为 default 则不区分调用来源
  • grade:限流阈值类型(QPS 或并发线程数);0代表根据并发数量来限流,1代表根据QPS来进行流量控制
  • count:限流阈值
  • strategy:调用关系限流策略
  • controlBehavior:流量控制效果(直接拒绝、Warm Up、匀速排队)
  • clusterMode:是否为集群模式
    启动成功会加载Nacos配置 :
    在这里插入图片描述通过postman或者curl访问几下localhost:8003/hello接口,再打开alibaba-sentinel-datasource-nacos服务。点击左侧菜单中的流控规则,可以看到已经存在一条记录了,具体如下:
    在这里插入图片描述思考:
    对于接口流控规则的修改就存在两个地方了:Sentinel控制台、Nacos控制台。
    那么我们在修改两个控制台会有什么样的效果呢
  • Sentinel控制台中修改规则:仅存在于服务的内存中,不会修改Nacos中的配置值,重启后恢复原来的值。
  • Nacos控制台中修改规则:服务的内存中规则会更新,Nacos中持久化规则也会更新,重启后依然保持。
    
文档

Nacos参考文档

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值