Sentinel

服务雪崩

  • 服务雪崩定义:一个服务失败,导致整条链路的所有服务都失败的连锁反应,就像雪山崩塌一样,小范围的问题引发整体崩溃。【即服务C一直没有响应给服务B,导致一直等待,占用资源,那么其他的访问服务则也会被阻塞】
  • 解决手段:服务熔断和服务降级。比如当链路中某个服务(如 Service C)异常时,及时 “熔断”(切断请求)或 “降级”(返回兜底逻辑),防止故障像多米诺骨牌一样蔓延,避免整条链路的服务都瘫痪。

举个例子,若 Service C 故障且没有保护措施,上游的 Service A、Service B 等调用它的服务会因等待响应而阻塞,最终导致整个服务链路的资源耗尽、全部失效,这就是服务雪崩。而服务熔断和降级能在 Service C 出问题时,快速隔离故障,保障其他服务正常运行。

服务限流

  • 核心逻辑:当系统能处理的并发量(比如 1 万)小于实际请求并发量(比如 2 万)时,限流机制会保障其中 1 万用户的请求正常处理,避免因请求量过大拖垮系统可用性。
  • 限流目的:通过限制 “并发访问数” 或 “时间窗口内的请求数量” 来保护系统。当流量达到限制时,会对超出的请求采取拒绝策略,比如跳转错误页面、请求排队、服务降级等。

可以类比生活中的 “地铁限流”:地铁站能容纳的客流是有限的,当客流超过承载量时,会通过分批放行、设置围栏等方式限流,避免站内拥挤瘫痪,保障整体秩序和安全。

熔断和降级

一、服务熔断

  • 定义:当服务提供者故障时,为防止雪崩,暂时隔离故障接口,后续请求直接失败,直到服务恢复。
  • 机制:基于断路器模式,分为 Closed(正常)、Open(熔断)、Half Open(半开试探)三种状态,是框架级的被动防护(类似电路断路器,达到故障阈值后自动触发)。

二、服务降级

  • 定义:为保障核心服务,主动舍弃非核心业务的处理能力。比如下游服务响应慢时,主动停掉非核心功能;或服务不可用时,上游调用本地降级逻辑快速返回。
  • 特点:是**业务级的主动策略(类似“开关”,通过配置中心控制哪些服务降级,如淘宝双11关闭退货功能**保障交易核心链路)。

三、核心区别

维度 服务熔断 服务降级
触发原因 服务故障(被动触发) 资源不足/保障核心(主动触发)
处理层面 框架级(底层自动隔离) 业务级(人工配置非核心功能降级)
目的 防止故障蔓延(避免雪崩) 保障核心服务可用性(牺牲非核心)
机制 断路器模式(Closed→Open→Half Open) 开关策略(配置中心控制降级范围)

简单总结:熔断是“被动防故障扩散”,降级是“主动保核心服务”,两者都是应对服务故障的手段,但触发逻辑和处理层面不同。

限流算法

一、各限流算法介绍

1. 计数器算法
  • 原理:在固定时间周期(如3秒)内累加请求数,若达到限流阈值则触发限流;周期结束后计数器清零。
  • 问题:存在“临界缺陷”。例如,若阈值是150请求/3秒,可能在2-3秒内涌入150请求,3-4秒内又涌入150请求,导致2秒内实际处理300请求,超过系统承载能力。

2. 滑动窗口算法
  • 原理:将固定时间窗口拆分为多个小窗口(如把3秒窗口拆成3个1秒小窗口),每个小窗口独立计数;窗口随时间滑动,总请求数为所有小窗口计数之和,若超过阈值则限流。
  • 作用:解决计数器算法的临界问题,使流量控制更平滑。

3. 令牌桶算法
  • 原理:系统以恒定速率向“令牌桶”中放入令牌;请求需先从桶中获取令牌才能被处理,无令牌则被限流;桶有最大容量,满时多余令牌会被丢弃。
  • 特点:允许一定程度的“突发流量”(只要桶中有令牌,可一次性处理多个请求),同时长期速率受控。

4. 漏桶算法
  • 原理:请求先进入“漏桶”,漏桶以恒定速率向外处理请求;若桶满,新请求会被丢弃或拒绝。
  • 特点:严格控制流量的流出速率,无论流入多快,流出速率始终恒定;能平滑突发流量,但无法处理合理的突发请求(灵活性低于令牌桶)。

二、算法区别对比

维度 计数器算法 滑动窗口算法 令牌桶算法 漏桶算法
流量控制粒度 固定时间周期 细分的小时间窗口 令牌生成速率+桶容量 恒定流出速率
突发流量支持 不支持(临界缺陷) 部分支持(窗口越小越灵活) 支持(桶存令牌可突发处理) 不支持(严格匀速流出)
实现复杂度 简单 中等(需拆分小窗口) 中等(需维护令牌生成和桶状态) 简单
典型应用场景 简单场景临时限流 对精度要求较高的限流 需兼容突发流量的场景(如API网关) 需严格匀速处理的场景(如消息中间件)

简单总结:

  • 计数器是“入门级”限流,易实现但有缺陷;
  • 滑动窗口是计数器的改良版,精度更高;
  • 令牌桶兼顾“速率控制”和“突发流量”;
  • 漏桶则是“严格匀速”的流量整形工具。

sentinel介绍

启动

一、准备工作

  1. 下载 Sentinel Dashboard
    Sentinel 提供了可视化控制台(Dashboard),用于监控和配置规则。
    下载地址:Sentinel 官方 Releases
    选择适合的版本(如 sentinel-dashboard-1.8.6.jar

二、启动 Sentinel Dashboard(控制台)

  1. 命令行启动
    打开终端,执行以下命令启动控制台:
java -jar sentinel-dashboard-1.8.6.jar
- 默认端口:`8080`  
- 默认账号密码:`sentinel` / `sentinel`
  1. 自定义配置(可选)
    如需修改端口、账号密码,可添加参数:
# 示例:修改端口为 8081,账号为 admin,密码为 123456
java -Dserver.port=8081 -Dsentinel.dashboard.auth.username=admin -Dsentinel.dashboard.auth.password=123456 -jar sentinel-dashboard-1.8.6.jar
  1. 验证启动
    访问 http://localhost:8080(或自定义端口),使用账号密码登录,能看到控制台界面即启动成功。

三、配置应用连接 Sentinel Dashboard

  1. 添加依赖
    在 Spring Boot/Cloud 项目的 pom.xml 中添加:
<!-- Sentinel 核心依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

  1. 配置连接信息
    application.ymlapplication.properties 中添加:
spring:
  cloud:
    sentinel:
      transport:
        # Sentinel Dashboard 地址和端口
        dashboard: localhost:8080
        # 应用与 Dashboard 通信的端口(默认 8719,如被占用会自动+1)
        port: 8719

四、启动应用并触发监控

  1. 启动应用
    启动你的 Spring Boot 应用,此时应用会自动连接 Sentinel Dashboard。
  2. 触发资源监控
    Sentinel 采用“懒加载”机制,首次访问受保护的资源后才会在控制台显示
    例如访问之前定义的接口:http://localhost:8001/foo1
    访问后,刷新 Sentinel Dashboard,即可在左侧“簇点链路”中看到 foo1 资源。

总结流程

  1. 启动 Sentinel Dashboard(控制台)
  2. 配置应用连接 Dashboard 并启动应用
  3. 访问受保护的资源,触发监控
  4. 在控制台配置规则并测试效果

通过以上步骤,即可完成 Sentinel 的启动和基础使用。生产环境中,还需考虑高可用配置(如规则持久化到 Nacos/Apollo 等)。

sentinel集成

一、编码方式

1. 引入 Maven 依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <version>2.1.1.RELEASE</version>
</dependency>

  • 作用:引入 Sentinel 的核心功能包,使项目具备 Sentinel 的限流、熔断、降级等能力。
2. 配置限流策略(通过 InitFunc 实现)

创建限流策略类 FlowRuleStrategy 实现 com.alibaba.csp.sentinel.init.InitFunc 接口:

package com.muse.sentinel.strategy;

import java.util.ArrayList;
import java.util.List;

import com.alibaba.csp.sentinel.init.InitFunc;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;

/**
 * 限流策略配置,实现 InitFunc 接口让 Sentinel 启动时自动加载规则
 */
public class FlowRuleStrategy implements InitFunc {
    @Override
    public void init() {
        List<FlowRule> rules = new ArrayList<>();
        FlowRule flowRule = new FlowRule();
        // 限流阈值(QPS 模式下表示每秒最多允许 1 个请求)
        flowRule.setCount(1);
        // todo:要限流的资源名称(需与 @SentinelResource 的 value 一致)
        flowRule.setResource("foo1");
        // 限流维度:QPS(每秒查询数)
        flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        // 限流针对的应用(default 表示不区分应用)
        flowRule.setLimitApp("default");
        rules.add(flowRule);
        // 将规则加载到 Sentinel 规则管理器
        FlowRuleManager.loadRules(rules);
    }
}
  • 作用:在应用启动时,自动初始化并加载限流规则,指定对资源 foo1QPS 模式 限流(每秒最多 1 个请求)。
3. 配置自动加载文件

在项目的 resources 目录下创建路径 META-INF/services/,并新建文件 com.alibaba.csp.sentinel.init.InitFunc,文件内容为限流策略类的全限定名:

com.muse.sentinel.strategy.FlowRuleStrategy
  • 作用:Sentinel 启动时会扫描该文件,自动加载并执行 FlowRuleStrategyinit 方法,完成限流规则的初始化。

4. 定义受保护的资源(通过 @SentinelResource 注解)

在 Controller 中定义接口,并通过 @SentinelResource 标记资源、指定限流后的处理方法:

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {
    /**
     * 受 Sentinel 保护的资源接口,资源名为 "foo1",限流后执行 blockHandlerFoo1 方法
     */
    @SentinelResource(value = "foo1", blockHandler = "blockHandlerFoo1")
    @GetMapping("/foo1")
    public String foo1() {
        return "-----foo1-----";
    }

    /**
     * 限流后的降级处理方法,参数需包含 BlockException
     */
    public String blockHandlerFoo1(BlockException e) {
        return "request blocking!";
    }
}
  • 作用
    • @SentinelResource(value = "foo1"):将 /foo1 接口标记为资源 foo1,使 Sentinel 能对其应用限流规则。
    • blockHandler = "blockHandlerFoo1":指定限流发生时执行的降级方法,返回友好的提示信息,避免直接抛出异常影响用户体验。

以下是基于 Sentinel Dashboard 方式集成 Spring Cloud 的完整流程:

二、利用Sentinel Dashboard

1. 引入 Maven 依赖

在 Spring Cloud 项目的 pom.xml 中添加:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <version>2.1.1.RELEASE</version>
</dependency>

2. 配置 application.yml 连接 Dashboard
spring:
  application:
    name: sentinel-demo # 应用名称,会在Dashboard中显示
  cloud:
    sentinel:
      transport:
        dashboard: 127.0.0.1:8080 # 连接Sentinel Dashboard的地址和端口
3.定义受保护的资源接口

在 Controller 中定义需要被 Sentinel 监控的接口(以 /dashboard 为例):

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DashboardDemoController {
    /**
     * 受Sentinel监控的资源接口,资源名为"dashboard"
     */
    @SentinelResource(value = "dashboard", blockHandler = "blockHandlerDashboard")
    @GetMapping("/dashboard")
    public String dashboard() {
        return "-----dashboard-----";
    }

    /**
     * 限流/熔断后的降级处理方法
     */
    public String blockHandlerDashboard(BlockException e) {
        return "请求被限流,请稍后再试!";
    }
}
4.触发资源监控并配置规则
1. 启动项目并访问接口

启动 Spring Boot 项目后,访问 http://localhost:8001/dashboard(假设项目端口为 8001),多次访问以触发 Sentinel 的“懒加载”监控机制。

2. 在 Dashboard 中配置“簇点链路”规则
  • 登录 Sentinel Dashboard(http://localhost:8000),左侧选择你的应用(sentinel-demo)。
  • 点击簇点链路,找到资源 dashboard,点击右侧的流控按钮。
  • 配置限流规则(例如:QPS 阈值设为 2,表示每秒最多允许 2 个请求),点击“新增”。

3. 测试限流效果

快速多次访问 http://localhost:8001/dashboard,当请求频率超过 QPS 阈值时,会返回 blockHandlerDashboard 中定义的降级提示“请求被限流,请稍后再试!”,说明 Dashboard 方式的限流规则已生效。

三、集成 Nacos 流程

一、集成流程

Sentinel 集成 Nacos 主要是为了实现规则持久化(避免应用重启后规则丢失),同时支持动态更新规则。以下是完整流程:

1. 环境准备
  • 启动 Nacos 服务端:确保 Nacos 已启动(默认地址 127.0.0.1:8848,账号密码 nacos/nacos)。
  • 启动 Sentinel Dashboard:确保 Sentinel 控制台已启动(默认地址 127.0.0.1:8080,账号密码 sentinel/sentinel)。
2. 项目集成配置
(1)引入依赖

在 Spring Cloud 项目的 pom.xml 中添加以下依赖:

<!-- Sentinel 核心依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- Sentinel 对接 Nacos 数据源的扩展依赖 -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

(2)配置 application.yml

根据你的配置,添加 Sentinel 连接 Dashboard 和 Nacos 的信息:

server:
  port: 8001
spring:
  application:
    name: sentinel-nacos-demo
  cloud:
    sentinel:
      # 连接 Sentinel Dashboard
      transport:
        dashboard: 127.0.0.1:8080
      # 配置 Nacos 作为规则数据源
      datasource:
        - nacos:
            server-addr: 127.0.0.1:8848  # Nacos 地址
            data-id: sentinel-nacos-demo-sentinel-flow  # Nacos 中存储规则的配置ID
            group-id: DEFAULT_GROUP  # Nacos 配置的分组
            data-type: json  # 配置格式为 JSON
            rule-type: flow  # 规则类型(流控规则)
3. Nacos 中配置规则

登录 Nacos 控制台(http://127.0.0.1:8848/nacos),按照以下步骤添加流控规则配置:

  • 进入「配置管理」→「配置列表」,点击「+ 新建配置」。
  • 填写配置信息:
    • Data IDsentinel-nacos-demo-sentinel-flow(与 application.ymldata-id 一致)。
    • GroupDEFAULT_GROUP(与 application.ymlgroup-id 一致)。
    • 配置格式JSON
    • 配置内容:示例流控规则(可根据需要调整):
[
  {
    "resource": "foo1",  # 资源名(需与 @SentinelResource 或 URL 资源一致)
#  "resource": "/withnacos",  # 这里也可以指定接口路径

    "limitApp": "default",
    "grade": 1,  # 1 表示 QPS 限流,0 表示并发线程数限流
    "count": 2,  # 限流阈值(QPS 模式下表示每秒最多 2 个请求)
    "strategy": 0,
    "controlBehavior": 0,
    "clusterMode": false
  }
]
  • 点击「发布」,完成 Nacos 中规则的配置。
4. 启动项目并验证

启动你的 Spring Boot 项目后,Sentinel 会自动从 Nacos 拉取规则并生效。

二、在 Sentinel 控制台的表现

完成集成后,在 Sentinel Dashboard 中会有以下体现:

1. 规则自动加载

启动项目后,访问 Sentinel Dashboard(http://127.0.0.1:8080),进入你的应用(sentinel-nacos-demo):

  • 点击「流控规则」,会看到从 Nacos 拉取的规则(如上述 foo1 资源的限流规则)已自动加载。
2. 规则动态同步(Nacos → Sentinel 控制台)

若在 Nacos 中修改规则配置(如调整 count 阈值)并发布,Sentinel 控制台会自动同步更新规则,无需重启应用。

3. 规则持久化保障

即使重启应用,Sentinel 也会从 Nacos 重新拉取规则,避免规则丢失。

总结
  • 集成流程:准备环境 → 项目引入依赖 → 配置 Dashboard 和 Nacos 连接 → Nacos 中配置规则 → 启动项目验证。
  • 控制台表现:规则自动加载、动态同步更新、持久化不丢失,实现了“配置一次,永久生效(除非主动修改 Nacos 配置)”的效果。

URL资源清洗处理器

控制器接口
/**
 * 案例3:URL资源清洗
 * 两个示例URL:
 * http://localhost:8001/urlCleaner/1 
 * http://localhost:8001/urlCleaner/2
 */
@GetMapping("/urlCleaner/{id}") // 路径包含动态参数{id}
public String urlCleaner(@PathVariable("id") int id) {
    return "-----urlCleaner-----";
}
URL资源清洗处理器
package com.muse.sentinel.handler;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import com.alibaba.csp.sentinel.adapter.servlet.callback.UrlCleaner;

/**
 * URL资源清洗处理器
 * 实现Sentinel的UrlCleaner接口,用于统一处理URL路径,将相似URL合并为同一资源
 */
@Service // 交给Spring容器管理,使Sentinel能够自动识别并使用
public class MuseUrlCleaner implements UrlCleaner {
    @Override
    public String clean(String s) {
        // 如果URL为空,直接返回
        if (StringUtils.isBlank(s)) {
            return s;
        }

        // 核心逻辑:将所有以/urlCleaner/开头的URL统一处理为/urlCleaner/*
        if (s.startsWith("/urlCleaner/")) {
            return "/urlCleaner/*";
        }
        // 其他URL不做处理,返回原始路径
        return s;
    }
}
核心作用

MuseUrlCleaner 实现了 Sentinel 的 UrlCleaner 接口,核心作用是:
对 URL 路径进行“清洗”(标准化处理),将动态参数不同但结构相同的 URL 识别为同一资源

例如:

  • 原始 URL:/urlCleaner/1/urlCleaner/2(仅动态参数 id 不同)
  • 清洗后:统一识别为 /urlCleaner/*(视为同一个资源)

这样 Sentinel 会将这些 URL 当作同一个资源进行限流/熔断等规则控制,避免因参数不同而被识别为多个资源,导致规则配置失效。

使用场景

主要解决 “动态参数 URL 被重复识别为不同资源” 的问题,典型场景包括:

  1. 路径包含动态参数的接口
    如:
    • /user/123/user/456(用户ID不同)
    • /order/789/order/012(订单ID不同)
      这些 URL 业务逻辑相同,但因参数不同,默认会被 Sentinel 识别为多个资源。通过 UrlCleaner 可将其统一为 /user/*/order/*,便于统一配置规则。
  2. 需要按 URL 前缀统一管控的场景
    例如希望对所有 /api/v1/* 路径的接口应用相同的限流规则,可通过清洗将 /api/v1/user/api/v1/order 统一为 /api/v1/*
  3. 避免资源数量爆炸
    若不对动态参数 URL 清洗,当参数值无限多时(如用户ID、订单ID),Sentinel 会生成大量资源,导致控制台难以管理,甚至影响性能。
生效效果

以案例中的接口为例:

  1. 访问 http://localhost:8001/urlCleaner/1http://localhost:8001/urlCleaner/2 时,Sentinel 会将它们识别为同一资源 /urlCleaner/*
  2. 在 Sentinel Dashboard 中,只需为 /urlCleaner/* 配置一次限流规则,就会对所有 urlCleaner 开头的动态参数 URL 生效。
  3. 若不配置 UrlCleaner,则会生成两个资源 /urlCleaner/1/urlCleaner/2,需要分别配置规则(显然不合理)。
总结
  • 作用:将结构相同但参数不同的 URL 标准化为同一资源,实现统一的规则管控。
  • 核心场景:处理含动态参数的 URL(如 /path/{id}),避免资源重复识别,简化规则配置。
  • 优势:减少资源数量,降低管理成本,确保规则对同类接口批量生效。

自定义URL级限流/熔断全局处理器

package com.muse.sentinel.handler;

import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Service;
import com.alibaba.csp.sentinel.adapter.servlet.callback.UrlBlockHandler;
import com.alibaba.csp.sentinel.slots.block.BlockException;

/**
 * 自定义URL级限流/熔断全局处理器
 * 实现Sentinel的UrlBlockHandler接口,用于统一处理URL资源被限流时的响应
 */
@Service // 让Spring容器管理该类,使其生效
public class MuseBlockHandler implements UrlBlockHandler {
    @Override
    public void blocked(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
                        BlockException e) throws IOException {
        // 设置响应格式为JSON,编码为UTF-8
        httpServletResponse.setHeader("Content-Type", "application/json;charset=UTF-8");
        // 自定义限流响应内容
        String message = "{\n"
        + "\t\"code\":\"400\",\n"
        + "\t\"message\":\"请求已被限流!\"\n"
        + "}";
        // 将响应写入输出流
        httpServletResponse.getWriter().write(message);
    }
}
一、核心作用

MuseBlockHandler 实现了 Sentinel 提供的 UrlBlockHandler 接口,主要作用是:
统一处理所有通过 URL 访问的资源被限流/熔断时的异常响应。

当客户端访问的 URL 触发了 Sentinel 的限流、熔断等规则时,Sentinel 会拦截请求并调用该类的 blocked 方法,返回自定义的响应结果(而非默认的错误页面或异常信息)。

例如代码中定义了 JSON 格式的响应:

{
  "code":"400",
  "message":"请求已被限流!"
}

这样前端可以更友好地处理限流场景(如显示“当前请求过频,请稍后再试”)。

二、应用场景

该处理器主要用于 URL 级别的资源保护,即未通过 <font style="color:#DF2A3F;">@SentinelResource</font> 注解标记的接口(或直接通过 URL 匹配的资源)。

具体应用场景对比:

  1. @SentinelResourceblockHandler 区别
    • @SentinelResource(blockHandler = "...")局部处理,仅针对被注解标记的资源生效(如之前的 foo1 资源)。
    • UrlBlockHandler全局处理,对所有通过 URL 访问的资源生效(无需注解标记)。
  2. 典型使用场景
    当项目中需要对大量接口进行统一限流处理(如所有 /api/* 路径),且不想为每个接口单独定义 blockHandler 时,可通过 UrlBlockHandler 实现全局统一响应。
三、生效条件(如何让它起作用)

要使 MuseBlockHandler 生效,需要满足:

  1. 项目中引入了 Sentinel 的 Servlet 适配器依赖(通常包含在 spring-cloud-starter-alibaba-sentinel 中):
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-web-servlet</artifactId>
</dependency>
  1. 该类被 Spring 容器扫描并管理(通过 @Service 注解已满足)。
  2. 触发 URL 级别的限流规则:
    • 在 Sentinel Dashboard 中为某个 URL 路径(如 /dashboard)配置限流规则。
    • 当访问该 URL 触发限流时,MuseBlockHandlerblocked 方法会被自动调用,返回自定义 JSON 响应。

:::color4
- 只要触发限流/熔断,没有被异常响应处理的,都会执行

:::

总结
  • 作用:全局统一处理 URL 资源被限流/熔断时的响应,返回自定义格式(如 JSON)。
  • 应用位置:对所有通过 URL 访问的接口生效,无需单独注解标记,适合全局统一异常处理场景。
  • 与局部 handler 对比:互补关系,局部 handler 优先级高于全局 handler(若接口同时配置了 @SentinelResource(blockHandler),则优先执行局部方法)。

网络模型

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐