Sentinel入门和应用

Sentinel入门

Sentinel

介绍

Sentinel是分布式系统的流控框架,支持服务限流,降级,熔断等功能,提供控制台web界面,Sentinel的核心概念是资源,通过控制面板配置规则,和资源联合起来

名词解释:

  • 限流:一般利用排队的方式控制流量,避免瞬时流量冲垮系统,削峰
  • 降级:系统,服务出现问题,也尽可能提供其他服务,如具体活动出问题则访问显示活动概览大页面,在可用和完全不可用间寻求平衡,返回友好提示,还比如推荐不可用则返回默认推荐或时间倒序内容
  • 熔断:直接拒绝访问返回提示,一般用于请求失败率过高或请求响应时间太长

Sentinel限流支持Qps,线程数,调用关系限流,Resilience4j是Rate Limiter限流,两者都是滑动窗口前者LeapArray,后者Ring Bit Buffer做实时统计信息

dashboard仪表盘部署

1.下载jar

https://github.com/alibaba/Sentinel/releases/tag/v1.8.0

2.启动jar

java -jar sentinel-dashboard-1.8.0.jar
若端口占用则指定端口号启动
java -jar -Dserver.port=8808 sentinel-dashboard-1.8.0.jar

3.访问localhost:8808

默认账号密码 sentinel
sentinel懒加载,只有使用时界面才会出现功能

Sentinel集成

增加pom依赖

<!-- 服务注册  服务发现需要引入的 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--健康监控-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--Nacos 配置中心依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

<!--**Sentinel 组件依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

配置文件

server:
  port: 8081 #程序端口号
spring:
  application:
    name: sentinel-provider-sample #应用名称
  cloud:
    sentinel:
      transport:
        port: 8719 #启动HTTP Server,并且该服务将与Sentinel仪表板进行交互,使Sentinel仪表板可以控制应用  如果被占用则从8719依次+1扫描
        dashboard: 127.0.0.1:8808  # 指定仪表盘地址
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #nacos服务注册、发现地址
      config:
        server-addr: 127.0.0.1:8848 #nacos配置中心地址
        file-extension: yml #指定配置内容的数据格式
management:
  endpoints:
    web:
      exposure:
        include: '*' #公开所有端点

Sentinel使用

下载JMeter

  1. 去阿帕奇下载http://jmeter.apache.org/download_jmeter.cgi

常用规则

注意:只有先调用接口才能添加规则

流控规则

流控主要是设置QPS或线程数等参数保护应用,针对某个资源的设置(接口即资源)

点击菜单簇点链路-资源名点流控

1.QPS-直接-快速失败

单机阈值设置100,则每秒只能通过100qps,其他全部失败
快速失败即fail—fast 直接拒绝请求 返回Blocked by Sentinel (flow limiting)

2.QPS-直接-Warm Up:预热

单机阈值设置100,预热时长设置5秒
初始请求QPS等于阈值100/coldFactor,coldFactor默认值3,预热5秒后单机阈值为100,拒绝请求也是快速失败
适用于给冷系统可设置的缓冲时间

3.QPS-直接-排队等待:请求均匀的速度通过,请求超过阈值就等待,超时就返回失败

单机阈值100,超时时间10000毫秒  // sentinel设置单位毫秒

4.QPS-关联-快速失败:若访问接口B到达了阈值,则让接口A返回失败,适用于资源之间争抢或依赖

单机阈值100,关联资源/test
则关联资源/test 

5.线程数-直接:限制处理请求的业务线程数,达到阈值限流

线程数,单机阈值1,流控模式直接

流控名词解释

  • 资源名:资源名称,唯一
  • 针对来源:对调用者进行限流而非被调用者,填写应用名称(spring.application.name的值),指定对哪个调用服务限流(默认default是全部)
  • 阈值类型
    • QPS:每秒请求数
    • 线程数:业务线程数
  • 流控模式
    • 直接:达到目标执行执行某流控
    • 关联:若关联资源达到目标就限流自身
    • 链路:当从某个接口过来的资源达到限流条件时,开启限流
针对来源是针对上级微服务,而链路流控是针对本服务资源上级接口,粒度更细,链路失效
  • 流控效果
    • 快速失败:直接返回失败结果,fail—fast
    • Warm Up:预热,给一个缓冲时间,初始值是阈值/codeFactor(默认3),慢慢达到设置的阈值
    • 排队等待:均速处理请求,而非一会限流失败,一会空闲,可设置超时时间
降级规则

降级主要有三个策略:RT慢调用比例,异常比例,异常数,即针对某个资源的设置

RT慢调用比例:

RT值上限4900ms,若需自定义,则启动Sentinel的jar时加入 -Dcsp.sentinel.statistic.max.rt=xxx

资源名/test,降级策略RT,RT:100ms,比例0-1 :0.5,熔断时长5s,最小请求数100

针对资源,最少需要100个请求才生效,0.5一半请求响应时间超过100ms则熔断5s

异常比例:表示请求该资源的异常总数占比

资源名/test,降级策略异常比例,比例0-1 :0.5,熔断时长5s,最小请求数100
针对资源,最少需要100个请求才生效,0.5一半请求异常则熔断5s

异常数:该资源一分钟的异常数

系统规则

流控规则和降级规则针对某个具体资源,系统规则针对整个应用,粒度更粗

应用下菜单系统规则

  • LOAD:linux系统负载,根据负载和线程数同时满足才会限流
(仅对 Linux/Unix-like 机器生效):系统的 load1 作为启发指标,进行自适应系统保护。当系统 load1 超过设定的启发值,且系统当前的并发线程数超过估算的系统容量时才会触发系统保护(BBR 阶段)。系统容量由系统的 maxQps * minRt 估算得出。设定参考值一般是 CPU cores * 2.5
  • RT:单机应用上所有资源平均的响应时间
  • 线程数:单机应用所能使用的业务线程数阈值
  • 入口QPS:单机应用所使用的每秒处理请求数
  • CPU使用率:单机应用cpu占系统cpu比例0-1
授权规则-黑白名单

授权规则是根据调用方判断调用资源的请求是否被允许,sentinel提供了黑白名单的授权类型,若配置了白名单,则表示只允许白名单的应用调用该资源时通过;若配置了黑名单,则表示黑名单的应用调用该资源不通过,其余均能通过

实现授权规则对应的流控应用需要实现sentinel的RequestOriginParser解析http请求返回来源origin 比较相等判断,不支持正则

import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser

// bean由spring管理
@Component
public class CustomReqOriParser implements RequestOriginParser {
    @Override
    public String parseOrigin(HttpServletRequest httpServletRequest) {
        // 请求参数简单判断
        String origin = httpServletRequest.getParameter("origin");
        if (StringUtils.isEmpty(origin)) {
            // 为空直接通过
            return "";
        }
        return origin; // 来源交由sentinel流控处理
    }
}

设置授权规则 应用block

调用curl localhost:8079/sentinelTest?origin=block

返回Blocked by Sentinel (flow limiting)

热点规则

热点:在一定时间内访问特别频繁

热点规则:粒度更细,针对资源参数限流,资源参数的值限流

1.先新增,资源名hotTest,只能用qps模式,参数索引0,单机阈值1,窗口10s。在10秒内携带参数索引0相同索引值的方法调用2次触发限流
2.修改高级选项,对索引0的索引值进行限流,一般单机阈值小于索引0的单机阈值。

@SentinelResource(value = "hotTest", blockHandler = "hotTestHandler")
@GetMapping("/hotTest")
public String hotTest(@RequestParam(required = false) String id) {
    if (StringUtils.isEmpty(id)) {
        return "id为空";
    }
    return "id为:" + id;
}
public String hotTestHandler(String id, BlockException blockException) {
    return "限流:" + id + "---err:" + blockException;
}

设置 顶级 索引0 单机阈值5 窗口10s
设置 高级选项 例外项2个  索引0 值 11 单机阈值1;值 12 单机阈值2

curl localhost:8079/hotTest 不会受到限流
curl localhost:8079/hotTest?id = 10 执行到第6次被限流 不同的id值重新计算
curl localhost:8079/hotTest?id = 11 执行到第2次被限流
curl localhost:8079/hotTest?id = 12 执行到第3次被限流

@SentinelResource注解

@SentinelResource注解用于根据实际定制化功能,类似Hystrix的@HystrixCommand,可以自定义错误页面(不再显示Blocked by Sentinel (flow limiting)),针对参数限流,定义资源

@SentinelResource

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface SentinelResource {
    String value() default "";

    EntryType entryType() default EntryType.OUT;

    int resourceType() default 0;

    String blockHandler() default "";

    Class<?>[] blockHandlerClass() default {};

    String fallback() default "";

    String defaultFallback() default "";

    Class<?>[] fallbackClass() default {};

    Class<? extends Throwable>[] exceptionsToTrace() default {Throwable.class};

    Class<? extends Throwable>[] exceptionsToIgnore() default {};
}

Sentinel API

@SentinelResource这个注解定义一个资源,在需要通过Sentinel来控制流量的地方使用@SentinelResource注解,value就是资源名称

自定义限流返回的异常信息

  • blockHandler:负责响应控制面板配置,对应处理 BlockException 的函数名称。blockHandler方法访问修饰符是 public,返回类型要与原方法匹配,参数类型需要和原方法匹配且最后加一个额外的异常类参数,类型为 BlockException。blockHandler 函数默认需要和原方法在同一个类中。
//blockHandler属于自定义兜底操作
// blockHandler方法的返回值类型要与原方法一致,且该方法除了原有的参数(方法签名),还要新增BlockException参数
@RequestMapping("/blockHandlerTest")
@SentinelResource(value = "blockHandlerTestResource", blockHandler = "blockHandlerTestHandler") // 资源名称为blockHandlerTestResource 违法规则后的兜底方法是blockHandlerTest
public String blockHandlerTest(String params) { // 测试blockHandler接口的方法
    return "blockHandlerTest";
}

// 进入自定义兜底 http状态码返回200不再是429错误
public String blockHandlerTestHandler(String params, BlockException blockException) { // 接口/blockHandlerTest 兜底方法
    return "blockHandlerTestHandler" + " " + blockException.getMessage();
}
  • blockHandlerClass:指定 blockHandlerClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。

对异常进行降级处理

  • fallback:针对业务异常的兜底方法,fallback方法名称,可选项,用于在抛出异常的时候提供 fallback 处理逻辑。fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore 里排除的异常类型)进行处理。

    fallback 函数签名和位置要求:
    返回值类型必须与原函数返回值类型一致;
    方法参数列表需要和原函数一致,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。
    fallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象
    注意:1.6.0 之前的版本 fallback 函数只针对降级异常(DegradeException)进行处理,不能针对业务异常进行处理。

@RequestMapping("/fallbackTest")
@SentinelResource(value = "fallbackTest", fallback = "fallbackHandler") // 资源名称为fallbackTest 异常后的兜底方法是blockHandlerTest
public String fallbackTest(String params) { // 测试blockHandler接口的方法
    int res = 1 / 0; // 除数不能为0 ,报错
    return "TestController#fallbackTest";
}

public String fallbackHandler(String params, Throwable throwable) { // 接口/fallbackTest 兜底方法
    return "TestController#fallbackHandler";
}
  • fallbackClass:指定对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。

  • defaultFallback(since 1.6.0):默认的 fallback 函数名称,可选项,通常用于通用的 fallback 逻辑(即可以用于很多服务或方法)。默认 fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。若同时配置了 fallback 和 defaultFallback,则只有 fallback 会生效。

    defaultFallback 函数签名要求:
    返回值类型必须与原函数返回值类型一致;
    方法参数列表需要为空,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。
    defaultFallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。
    注意:1.8.0 版本开始,defaultFallback 支持在类级别进行配置。

  • exceptionsToIgnore(since 1.6.0):用于指定哪些异常被排除掉,不会计入异常统计,也不会进入 fallback 逻辑,而是原样抛出。

@RequestMapping("/exceptionsToIgnoreTest")
@SentinelResource(value = "exceptionsToIgnoreTest",fallback = "exceptionsToIgnoreTestFallback",exceptionsToIgnore = {ArithmeticException.class, RuntimeException.class}) // 忽略ArithmeticException异常  可以配置多个
public String exceptionsToIgnoreTest(){
    if (RandomUtils.nextInt(0, 10) > 5) {
        int i = 1 / 0; // 除数不能为0 ,此处必报错
    } else {
        throw new IllegalArgumentException("err arg!");
    }
    return "exceptionsToIgnoreTest ";
}
public String exceptionsToIgnoreTestFallback(Throwable throwable) { // 接口/exceptionsToIgnoreTest 兜底方法hr
    return "exceptionsToIgnoreTestFallback:" + throwable.getMessage();
}
// 调用/exceptionsToIgnoreTest RuntimeException和ArithmeticException异常抛出
// 其他异常如IllegalArgumentException等Throwable异常捕获调用fallback

fallback+blockHandler结合fallbackClass+blockHandlerClass联合使用:限流处理和异常处理与业务解耦

@RequestMapping("/test")
@SentinelResource(value = "test",
    fallbackClass = {ExceptionHandler.class},fallback = "sentinelTestFallback", 
    blockHandlerClass ={BlockHandler.class},blockHandler = "sentinelTestBlockHandler")
public String sentinelTest() {  // sentinel组件测试方法  fallback和blockHandler联合起来
    int res = 1 / 0; // 除数不能为0 ,此处必报错
    return "sentinelTest ";
}


// ExceptionHandler异常处理类中
public String sentinelTestFallback( ) { // 接口/sentinelTest 兜底方法
    return "sentinelTestFallback";
}
// BlockHandler阻塞处理类中
public String sentinelTestBlockHandler(BlockException blockException) { // 接口/sentinelTest 兜底方法
    return "sentinelTestBlockHandler";
}
// 单机阈值限制2 
// 前两次直接报错走fallbackClass类中的fallback方法
// 第三次开始触发流控走blockHandlerClass类中的blockHandler方法
// 注意类中的方法必须是静态static方法

Sentinel运维

Sentinel数据持久化

Sentinel持久化方案有

  • 存储到文件
  • redis
  • nacos
  • zookeeper
  • apollo

使用nacos进行客户端规则持久化

即客户端从nacos配置中心获取规则json文件

客户端pom加入sentinel访问nacos数据源的依赖

<!--sentinel持久化 访问nacos数据源的依赖-->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
流控规则

客户端bootstrap.yml文件增加datasource的配置

server:
  port: 8079 #程序端口号
spring:
  application:
    name: sentinel-service #应用名称
  cloud:
    sentinel:
      datasource:
        ds1:  # ds1是自己取得名字
          nacos: #表示使用nacos
            server-addr: 127.0.0.1:8848 # nacos 服务地址
            dataId: sentinel-consumer-ds1  #nacos dataId
            groupId: DEFAULT_GROUP  #  分组 默认分组
            namespace: 73739b75-d68d-4a35-a9e0-005e5f1cdae7 # 可以指定namespace 不然默认public
            data-type: json  # 数据类型 json
            rule-type: flow  #flow 表示流控规则
      transport:
        port: 8719 #启动HTTP Server,并且该服务将与Sentinel仪表板进行交互,使Sentinel仪表板可以控制应用 如果被占用则从8719依次+1扫描
        dashboard: 127.0.0.1:8080  # 指定仪表盘地址
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #nacos服务注册、发现地址
      config:
        server-addr: 127.0.0.1:8848 #nacos配置中心地址
        file-extension: yml #指定配置内容的数据格式
management:
  endpoints:
    web:
      exposure:   # 
        include: '*' #公开所有端点

rule-type: flow #flow 表示流控规则 degrade降级规则 system系统规则

FlowRule.json

[
  {
    "resource": "资源名称 路径/test或自定义名称test",
    "controlBehavior": 0, // 流控效果 快速失败,Warm up,排队等待
                // public static final int CONTROL_BEHAVIOR_DEFAULT = 0;
                // public static final int CONTROL_BEHAVIOR_WARM_UP = 1;
                // public static final int CONTROL_BEHAVIOR_RATE_LIMITER = 2;
                // public static final int CONTROL_BEHAVIOR_WARM_UP_RATE_LIMITER = 3;
        //Rate limiter control behavior: 0. default(reject directly)快速失败, 1. warm up, 2. rate limiter 流控排队等待, 3. warm up + rate limiter
                
    "count": 20.0, // 表示限流阈值
    "grade": 1, // 阈值类型,取值看RuleConstant类 
            //FLOW_GRADE_QPS = 1 qps限流 FLOW_GRADE_THREAD = 0线程数限流
    "limitApp": "default", // 表示要限制哪些来源的调用,default是全限制
    "strategy": 0 // 流控模式 直接 关联 链路
                // STRATEGY_DIRECT = 0 直接
                // STRATEGY_RELATE = 1 关联
                // STRATEGY_CHAIN = 2 链路 
  },
  {
    "resource": "abc1",
    "controlBehavior": 0,
    "count": 20.0,
    "grade": 1,
    "limitApp": "default",
    "strategy": 0
  }
]

配置完nacos,sentinel控制台会显示流控规则

RuleConstant.java

public final class RuleConstant {

    public static final int FLOW_GRADE_THREAD = 0;
    public static final int FLOW_GRADE_QPS = 1;

    public static final int DEGRADE_GRADE_RT = 0;
    /**
     * Degrade by biz exception ratio in the current {@link IntervalProperty#INTERVAL} second(s).
     */
    public static final int DEGRADE_GRADE_EXCEPTION_RATIO = 1;
    /**
     * Degrade by biz exception count in the last 60 seconds.
     */
    public static final int DEGRADE_GRADE_EXCEPTION_COUNT = 2;

    public static final int DEGRADE_DEFAULT_SLOW_REQUEST_AMOUNT = 5;
    public static final int DEGRADE_DEFAULT_MIN_REQUEST_AMOUNT = 5;

    public static final int AUTHORITY_WHITE = 0;
    public static final int AUTHORITY_BLACK = 1;

    public static final int STRATEGY_DIRECT = 0;
    public static final int STRATEGY_RELATE = 1;
    public static final int STRATEGY_CHAIN = 2;

    public static final int CONTROL_BEHAVIOR_DEFAULT = 0;
    public static final int CONTROL_BEHAVIOR_WARM_UP = 1;
    public static final int CONTROL_BEHAVIOR_RATE_LIMITER = 2;
    public static final int CONTROL_BEHAVIOR_WARM_UP_RATE_LIMITER = 3;

    public static final int DEFAULT_BLOCK_STRATEGY = 0;
    public static final int TRY_AGAIN_BLOCK_STRATEGY = 1;
    public static final int TRY_UNTIL_SUCCESS_BLOCK_STRATEGY = 2;

    public static final int DEFAULT_RESOURCE_TIMEOUT_STRATEGY = 0;
    public static final int RELEASE_RESOURCE_TIMEOUT_STRATEGY = 1;
    public static final int KEEP_RESOURCE_TIMEOUT_STRATEGY = 2;

    public static final String LIMIT_APP_DEFAULT = "default";
    public static final String LIMIT_APP_OTHER = "other";

    public static final int DEFAULT_SAMPLE_COUNT = 2;
    public static final int DEFAULT_WINDOW_INTERVAL_MS = 1000;

    private RuleConstant() {}
}
降级规则

配置文件yml

server:
  port: 8079 #程序端口号
spring:
  application:
    name: sentinel-service #应用名称
  cloud:
    sentinel:
      datasource:
        ds2:  # ds2是自己取得名字
          nacos: #表示使用nacos
            server-addr: 127.0.0.1:8848 # nacos 服务地址
            dataId: sentinel-consumer-ds2  #nacos dataId
            groupId: DEFAULT_GROUP  # 分组 默认分组
            data-type: json  # 数据类型 json
            rule-type: degrade  #degrade 表示流控规则
      transport:
        port: 8719 #启动HTTP Server,并且该服务将与Sentinel仪表板进行交互,使Sentinel仪表板可以控制应用 如果被占用则从8719依次+1扫描
        dashboard: 127.0.0.1:8080  # 指定仪表盘地址
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #nacos服务注册、发现地址
      config:
        server-addr: 127.0.0.1:8848 #nacos配置中心地址
        file-extension: yml #指定配置内容的数据格式
management:
  endpoints:
    web:
      exposure:
        include: '*' #公开所有端点

DegradeRule.json

[
  {
    "resource": "资源名称",
    "count": 20.0, # 阈值
    "grade": 0,  # 降级策略 0-RT 1-异常比例 2-异常数 
    "passCount": 0, # 
    "timeWindow": 10 # 熔断时间窗口
    "minRequestAmount": 100 # 至少多少个请求后再生效
    "slowRatioThreshold": 1
        /**
         * The threshold of slow request ratio in RT mode.
         */
        // private double slowRatioThreshold = 1.0d 默认1 用于RT 
  },
  {
    "resource": "abc1",
    "count": 15.0,
    "grade": 0,
    "passCount": 0,
    "timeWindow": 10
  }
]
系统规则

配置文件

ds3:  # ds3是自定义命名
  nacos: #表示使用nacos
    server-addr: 127.0.0.1:8848 # nacos 服务地址
    dataId: sentinel-consumer-ds3  #nacos dataId
    groupId: DEFAULT_GROUP  # 分组 默认分组
    data-type: json  # 数据类型 json
    rule-type: system  #system 表示系统规则

json 只取一个

[
  {
    "avgRt": 10, # 系统平均响应时间
    "highestSystemLoad": 5.0, # 负载
    "maxThread": 10,    # 最大业务线程
    "qps": 20.0 # qps
    "highestCpuUsage": 0.1 # cpu使用率
  }
]

全部配置文件

server:
  port: 8079 #程序端口号
spring:
  application:
    name: sentinel-service #应用名称
  cloud:
    sentinel:
      datasource:
        ds1:  # ds1是自己取得名字
          nacos: #表示使用nacos
            server-addr: 127.0.0.1:8848 # nacos 服务地址
            dataId: sentinel-consumer-ds1  #nacos dataId
            groupId: DEFAULT_GROUP  #  分组 默认分组
            data-type: json  # 数据类型 json
            rule-type: flow  #flow 表示流控规则
        ds2:  # ds2是自己取得名字
          nacos: #表示使用nacos
            server-addr: 127.0.0.1:8848 # nacos 服务地址
            dataId: sentinel-consumer-ds2  #nacos dataId
            groupId: DEFAULT_GROUP  # 分组 默认分组
            data-type: json  # 数据类型 json
            rule-type: degrade  #degrade 表示流控规则
        ds3:  # ds3是自己取得名字
          nacos: #表示使用nacos
            server-addr: 127.0.0.1:8848 # nacos 服务地址
            dataId: sentinel-consumer-ds3  #nacos dataId
            groupId: DEFAULT_GROUP  # 分组 默认分组
            data-type: json  # 数据类型 json
            rule-type: system  #system 表示系统规则
      transport:
        port: 8719 #启动HTTP Server,并且该服务将与Sentinel仪表板进行交互,使Sentinel仪表板可以控制应用 如果被占用则从8719依次+1扫描
        dashboard: 127.0.0.1:8080  # 指定仪表盘地址
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #nacos服务注册、发现地址
      config:
        server-addr: 127.0.0.1:8848 #nacos配置中心地址
        file-extension: yml #指定配置内容的数据格式
management:
  endpoints:
    web:
      exposure:
        include: '*' #公开所有端点

修改sentinel dashboard源码通过nacos进行规则持久化

即sentinel控制面板修改规则同步到nacos

集群流控

集群流控是为了解决服务集群下流量不均匀,前面只是单机流控

要用到SPI:一种服务发现机制,查找META-INF/services下的文件,加载文件里定义的类。即定义一个接口,开发者定义实现类并放在services下,/META-INF/services/com.alibaba.csp.sentinel.init.InitFunc文件填写实现类路径com.test.init.ApplicationIniter

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值