Sentinel熔断模板灰度验证 - 第2节

2.1 Sentinel 控制台安装

Sentinel 控制台是流量治理的图形化管理端,提供实时监控、规则配置、集群管理等功能。本教程以 Sentinel 1.8.7 版本为例,演示控制台的安装与启动。

2.1.1 下载与启动

Sentinel 控制台是一个标准的 Spring Boot 应用,打包为可执行 JAR 文件。您可以通过以下两种方式获取:

  • 方式一(推荐):从 GitHub Releases 页面下载 sentinel-dashboard-1.8.7.jar。
  • 方式二:从 Maven 中央仓库下载后自行构建。

启动命令如下:

java -Dserver.port=8080 \
     -Dcsp.sentinel.dashboard.server=localhost:8080 \
     -Dproject.name=sentinel-dashboard \
     -jar sentinel-dashboard-1.8.7.jar
参数 说明 默认值
-Dserver.port 控制台 HTTP 服务端口 8080
-Dcsp.sentinel.dashboard.server 控制台自身地址,用于客户端上报心跳 localhost:8080
-Dproject.name 应用名称,在控制台标识该服务 sentinel-dashboard
-Dsentinel.dashboard.auth.username 登录用户名(可选) sentinel
-Dsentinel.dashboard.auth.password 登录密码(可选) sentinel

启动成功后,浏览器访问 http://localhost:8080,使用默认账号 sentinel / sentinel 登录,即可看到控制台主界面。

提示:生产环境建议修改默认密码,并配置 JVM 参数 -Dserver.ssl.enabled=true 启用 HTTPS。

2.1.2 控制台功能概览

控制台首页左侧为导航菜单,核心功能模块如下:

  • 机器列表:展示已接入的客户端应用及实例信息。
  • 实时监控:按时间维度展示各资源的 QPS、响应时间、拒绝量等指标。
  • 流控规则:配置 QPS 阈值、线程数阈值等流量控制策略。
  • 熔断规则:配置异常比例、慢调用比例、异常数等熔断降级策略。
  • 热点规则:针对特定参数进行限流。
  • 系统规则:基于系统负载(Load、CPU 使用率等)的全局保护。
  • 授权规则:黑白名单访问控制。
Sentinel 控制台功能架构 Sentinel 控制台 机器列表 实时监控 规则管理 流控规则 熔断规则 热点/系统/授权

2.2 Sentinel 客户端接入

客户端接入 Sentinel 分为两步:引入依赖、配置连接参数。以下以 Spring Boot 2.x + Spring Cloud Alibaba 为例。

2.2.1 添加 Maven 依赖

在 pom.xml 中引入 Sentinel Starter:

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

如果未使用 Spring Cloud Alibaba,可直接引入核心依赖:

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-core</artifactId>
    <version>1.8.7</version>
</dependency>
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-transport-simple-http</artifactId>
    <version>1.8.7</version>
</dependency>

2.2.2 配置连接参数

在 application.yml 中配置 Sentinel 控制台地址:

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080    # 控制台地址
        port: 8719                   # 客户端与控制台通信的端口
      eager: true                    # 是否提前注册到控制台
      enabled: true                  # 是否启用 Sentinel
配置项 说明 默认值
transport.dashboard 控制台地址,格式 ip:port localhost:8080
transport.port 客户端 HTTP Server 端口,用于接收控制台推送的规则 8719
eager 是否在应用启动时就注册到控制台 false
enabled 是否启用 Sentinel 拦截器 true
注意:如果本地同时启动多个客户端实例,需确保 transport.port 不冲突。Sentinel 会尝试从指定端口开始递增查找可用端口。

2.2.3 验证客户端连接

启动 Spring Boot 应用后,观察控制台日志:

[Sentinel] register to dashboard success, dashboard address: localhost:8080
[Sentinel] heartbeat sender started, dashboard: localhost:8080

登录控制台,在左侧菜单点击 机器列表,即可看到已注册的客户端实例。


2.3 Hello World 示例

本节通过一个完整的 REST 接口示例,演示 Sentinel 的流控与熔断效果。

2.3.1 创建测试接口

创建一个简单的 Controller:

@RestController
public class HelloController {

    @GetMapping("/hello")
    @SentinelResource(value = "hello", 
                      blockHandler = "blockHandlerMethod",
                      fallback = "fallbackMethod")
    public String hello() {
        // 模拟业务处理耗时
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        return "Hello, Sentinel!";
    }

    // 限流/熔断后的兜底方法
    public String blockHandlerMethod(BlockException ex) {
        return "请求被限流或熔断,请稍后重试!";
    }

    // 业务异常后的降级方法
    public String fallbackMethod(Throwable t) {
        return "服务异常,已降级处理!";
    }
}

2.3.2 配置流控规则

在控制台为 hello 资源添加一条流控规则:

  • 资源名:hello
  • 阈值类型:QPS
  • 单机阈值:2
  • 流控模式:直接
  • 流控效果:快速失败

配置完成后,使用压测工具或浏览器快速刷新 http://localhost:8080/hello,当 QPS 超过 2 时,将返回 请求被限流或熔断,请稍后重试!。

2.3.3 配置熔断规则

在控制台为 hello 资源添加一条熔断规则:

  • 资源名:hello
  • 熔断策略:慢调用比例
  • 最大 RT:200 毫秒
  • 比例阈值:0.5
  • 最小请求数:5
  • 统计时长:1000 毫秒
  • 熔断时长:10 秒

由于 hello() 方法固定休眠 100ms,当连续请求中超过 50% 的响应时间大于 200ms 时(本例不会触发),或调整休眠时间为 300ms 后,熔断器将打开,后续请求直接进入 blockHandlerMethod。

Hello World 请求处理流程 客户端请求 Sentinel 拦截器 流控规则检查 熔断规则检查 hello() blockHandler fallback

2.3.4 验证效果

使用 curl 或浏览器连续访问接口,观察返回结果的变化:

# 正常请求
$ curl http://localhost:8080/hello
Hello, Sentinel!

# 触发流控(快速刷新)
$ curl http://localhost:8080/hello
请求被限流或熔断,请稍后重试!

# 触发熔断(模拟慢调用后)
$ curl http://localhost:8080/hello
请求被限流或熔断,请稍后重试!
关键结论:Sentinel 的 @SentinelResource 注解配合控制台规则配置,可以在不侵入业务代码的前提下实现流量控制和熔断降级。blockHandler 处理 Sentinel 定义的异常,fallback 处理业务运行时异常,两者职责分离。

2.4 本章小结

通过本章学习,您已完成 Sentinel 的快速入门:

  • 安装并启动了 Sentinel 控制台,了解其功能模块。
  • 将 Spring Boot 应用作为客户端接入控制台。
  • 编写 Hello World 示例,验证流控与熔断效果。