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 登录,即可看到控制台主界面。
-Dserver.ssl.enabled=true 启用 HTTPS。
2.1.2 控制台功能概览
控制台首页左侧为导航菜单,核心功能模块如下:
- 机器列表:展示已接入的客户端应用及实例信息。
- 实时监控:按时间维度展示各资源的 QPS、响应时间、拒绝量等指标。
- 流控规则:配置 QPS 阈值、线程数阈值等流量控制策略。
- 熔断规则:配置异常比例、慢调用比例、异常数等熔断降级策略。
- 热点规则:针对特定参数进行限流。
- 系统规则:基于系统负载(Load、CPU 使用率等)的全局保护。
- 授权规则:黑白名单访问控制。
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。
2.3.4 验证效果
使用 curl 或浏览器连续访问接口,观察返回结果的变化:
# 正常请求
$ curl http://localhost:8080/hello
Hello, Sentinel!
# 触发流控(快速刷新)
$ curl http://localhost:8080/hello
请求被限流或熔断,请稍后重试!
# 触发熔断(模拟慢调用后)
$ curl http://localhost:8080/hello
请求被限流或熔断,请稍后重试!
@SentinelResource 注解配合控制台规则配置,可以在不侵入业务代码的前提下实现流量控制和熔断降级。blockHandler 处理 Sentinel 定义的异常,fallback 处理业务运行时异常,两者职责分离。
2.4 本章小结
通过本章学习,您已完成 Sentinel 的快速入门:
- 安装并启动了 Sentinel 控制台,了解其功能模块。
- 将 Spring Boot 应用作为客户端接入控制台。
- 编写 Hello World 示例,验证流控与熔断效果。