1. 首页 > 软件安装教程 > 正文

Sentinel安装配置-Sentinel流控安装配置_升级迁移详细过程

1. Sentinel概述与环境规划

Sentinel是阿里巴巴开源的流量控制和熔断降级组件,提供流量控制、熔断降级、系统负载保护等功能。它可以帮助保障微服务的稳定性,防止雪崩效应。更多学习教程www.fgedu.net.cn

1.1 Sentinel版本说明

Sentinel目前主要版本为1.8,本教程以Sentinel 1.8为例进行详细讲解。

# 查看Sentinel版本
$ java -jar sentinel-dashboard.jar –version
Sentinel Dashboard 1.8.7

# 查看Dashboard状态
$ curl http://192.168.1.51:8080/auth/login

# 输出示例:
{“code”:401,”success”:false,”message”:”Please login first.”}

1.2 环境规划

本次安装环境规划如下:

主机名:fgedudb01.fgedu.net.cn
IP地址:192.168.1.51
Dashboard端口:8080
API端口:8719
安装目录:/opt/sentinel
数据目录:/data/sentinel
日志目录:/data/sentinel/logs
配置目录:/opt/sentinel/conf

Java环境:
JDK版本:OpenJDK 17
JAVA_HOME:/usr/lib/jvm/java-17
JVM堆大小:512MB

1.3 Sentinel核心特性

主要特点:
1. 流量控制:QPS限流、并发线程数限流
2. 熔断降级:慢调用比例、异常比例、异常数熔断
3. 系统保护:CPU使用率、系统Load、入口QPS保护
4. 热点参数限流:针对热点参数进行限流
5. 实时监控:提供实时监控数据和图表
6. 规则管理:支持动态规则配置和持久化
7. 集群流控:支持集群限流模式
8. 多语言支持:提供Java、Go、C++等SDK

2. 硬件环境要求与检查

在安装Sentinel之前,需要对服务器硬件环境进行全面检查。学习交流加群风哥微信: itpux-com

2.1 最低硬件要求

最低配置:
CPU:2核心
内存:2GB
磁盘:5GB

推荐配置(生产环境):
CPU:4核心以上
内存:4GB以上
磁盘:20GB以上

高可用配置:
CPU:8核心以上
内存:8GB以上
磁盘:50GB以上

2.2 Java环境检查

# 检查JDK版本
$ java -version
openjdk version “17.0.9” 9.0.4
OpenJDK Runtime Environment (Temurin-17.0.9+9) (build 17.0.9+9)
OpenJDK 64-Bit Server VM (build 17.0.9+9, mixed mode, sharing)

# 检查JAVA_HOME
$ echo $JAVA_HOME
/usr/lib/jvm/java-17

# 查看Java安装路径
$ which java
/usr/bin/java

2.3 系统环境检查

# 检查操作系统版本
# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.8 (Ootpa)

# 检查内存信息
# free -h
total used free shared buff/cache available
Mem: 15Gi 1.0Gi 13Gi 256Mi 1.0Gi 14Gi
Swap: 7Gi 0B 7Gi

# 检查磁盘空间
# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg_system-lv_root 100G 5.0G 95G 5% /
/dev/mapper/vg_data-lv_data 500G 50G 450G 10% /data

3. Sentinel安装步骤

本节详细介绍Sentinel 1.8的安装过程。学习交流加群风哥QQ113257174

3.1 创建用户和目录

# 创建sentinel用户
# groupadd -g 1010 sentinel
# useradd -u 1010 -g sentinel -d /opt/sentinel -s /bin/bash sentinel
# passwd sentinel

# 创建目录
# mkdir -p /opt/sentinel
# mkdir -p /data/sentinel/{logs,data}

# 设置目录权限
# chown -R sentinel:sentinel /opt/sentinel
# chown -R sentinel:sentinel /data/sentinel

3.2 下载并安装Sentinel Dashboard

# 切换到安装目录
# cd /usr/local/src

# 下载Sentinel Dashboard
# wget https://github.com/alibaba/Sentinel/releases/download/1.8.7/sentinel-dashboard-1.8.7.jar

# 复制到安装目录
# cp sentinel-dashboard-1.8.7.jar /opt/sentinel/

# 设置目录权限
# chown -R sentinel:sentinel /opt/sentinel

# 验证安装
$ ls -la /opt/sentinel/
总用量 20480
-rw-r–r–. 1 sentinel sentinel 20971520 4月 4 10:00 sentinel-dashboard-1.8.7.jar

3.3 配置环境变量

# 配置sentinel用户环境变量
$ vi ~/.bash_profile

# 添加以下内容
export SENTINEL_HOME=/opt/sentinel
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/bin:$PATH

# 使配置生效
$ source ~/.bash_profile

# 验证环境变量
$ echo $SENTINEL_HOME
/opt/sentinel

3.4 启动Sentinel Dashboard

# 启动Dashboard
$ cd /opt/sentinel
$ java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.7.jar &

# 输出示例:
INFO: log base dir is: /data/sentinel/logs/
INFO: Sentinel log output to /data/sentinel/logs/sentinel-dashboard.log
INFO: Starting Sentinel Dashboard…

# 检查端口
$ netstat -tlnp | grep java
tcp6 0 0 :::8080 :::* LISTEN 12345/java
tcp6 0 0 :::8719 :::* LISTEN 12345/java

# 检查服务状态
$ curl http://192.168.1.51:8080/auth/login

# 输出示例:
{“code”:401,”success”:false,”message”:”Please login first.”}

3.5 配置防火墙

# 配置防火墙
# firewall-cmd –permanent –add-port=8080/tcp
success
# firewall-cmd –permanent –add-port=8719/tcp
success
# firewall-cmd –reload
success

# 访问管理界面
# 浏览器访问: http://192.168.1.51:8080
# 默认用户名: sentinel
# 默认密码: sentinel

风哥提示:Sentinel默认使用sentinel/sentinel作为管理用户。生产环境建议修改默认密码并配置更严格的访问控制。

4. Sentinel参数配置

Sentinel参数配置是性能优化的关键步骤,直接影响系统性能。更多学习教程公众号风哥教程itpux_com

4.1 JVM配置

# 创建启动脚本
$ vi /opt/sentinel/start.sh

#!/bin/bash
JAVA_OPTS=”-server -Xms512m -Xmx512m -Xmn256m”
JAVA_OPTS=”${JAVA_OPTS} -XX:+UseG1GC -XX:MaxGCPauseMillis=200″
JAVA_OPTS=”${JAVA_OPTS} -Dserver.port=8080″
JAVA_OPTS=”${JAVA_OPTS} -Dcsp.sentinel.dashboard.server=192.168.1.51:8080″
JAVA_OPTS=”${JAVA_OPTS} -Dproject.name=sentinel-dashboard”
JAVA_OPTS=”${JAVA_OPTS} -Dsentinel.dashboard.auth.username=sentinel”
JAVA_OPTS=”${JAVA_OPTS} -Dsentinel.dashboard.auth.password=fgedu123″
JAVA_OPTS=”${JAVA_OPTS} -Dserver.servlet.session.timeout=7200″

java ${JAVA_OPTS} -jar /opt/sentinel/sentinel-dashboard-1.8.7.jar

# 设置执行权限
$ chmod +x /opt/sentinel/start.sh

# 使用脚本启动
$ /opt/sentinel/start.sh &

4.2 Dashboard配置

# 创建配置文件
$ vi /opt/sentinel/application.properties

# 服务端口
server.port=8080

# 项目名称
project.name=sentinel-dashboard

# Dashboard地址
csp.sentinel.dashboard.server=192.168.1.51:8080

# 认证配置
sentinel.dashboard.auth.username=admin
sentinel.dashboard.auth.password=fgedu123

# Session超时时间(秒)
server.servlet.session.timeout=7200

# 日志目录
csp.sentinel.log.dir=/data/sentinel/logs

# 规则持久化配置(使用Nacos)
sentinel.datasource.nacos.server-addr=192.168.1.51:8848
sentinel.datasource.nacos.namespace=sentinel
sentinel.datasource.nacos.group-id=SENTINEL_GROUP

# 启动时指定配置文件
$ java -jar sentinel-dashboard-1.8.7.jar –spring.config.location=/opt/sentinel/application.properties &

4.3 客户端配置

# Maven依赖

com.alibaba.csp
sentinel-core
1.8.7


com.alibaba.csp
sentinel-transport-simple-http
1.8.7


com.alibaba.csp
sentinel-annotation-aspectj
1.8.7

# application.yml配置
spring:
application:
name: fgedu-service

# JVM参数配置
-Dcsp.sentinel.dashboard.server=192.168.1.51:8080
-Dproject.name=fgedu-service
-Dcsp.sentinel.api.port=8719
-Dcsp.sentinel.log.dir=/data/sentinel/logs

生产环境建议:生产环境建议配置规则持久化,将规则保存到Nacos或数据库中,避免重启后规则丢失。

5. 流量控制规则

Sentinel提供了丰富的流量控制规则,本节介绍常用的规则配置方法。from:www.itpux.com

5.1 流量控制规则

# 使用API配置流控规则
FlowRule rule = new FlowRule();
rule.setResource(“fgedu-api”);
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(100); // QPS限制为100
rule.setStrategy(RuleConstant.STRATEGY_DIRECT);
rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT);
FlowRuleManager.loadRules(Collections.singletonList(rule));

# 使用Dashboard配置
# 1. 访问 http://192.168.1.51:8080
# 2. 点击 “簇点链路” -> 选择资源
# 3. 点击 “流控” -> 配置规则

# 规则参数说明:
# – resource: 资源名称
# – grade: 限流阈值类型(QPS或线程数)
# – count: 限流阈值
# – strategy: 流控策略(直接、关联、链路)
# – controlBehavior: 流控效果(快速失败、Warm Up、排队等待)

# 查看规则
$ curl http://192.168.1.51:8080/v1/flow/rules?app=fgedu-service

# 输出示例:
[
{
“id”: 1,
“app”: “fgedu-service”,
“resource”: “fgedu-api”,
“limitApp”: “default”,
“grade”: 1,
“count”: 100,
“strategy”: 0,
“controlBehavior”: 0
}
]

5.2 熔断降级规则

# 使用API配置熔断规则
DegradeRule rule = new DegradeRule(“fgedu-api”);
rule.setGrade(CircuitBreakerStrategy.SLOW_REQUEST_RATIO.getType());
rule.setCount(1000); // 慢调用阈值:1000ms
rule.setSlowRatioThreshold(0.5); // 慢调用比例阈值:50%
rule.setMinRequestAmount(10); // 最小请求数
rule.setStatIntervalMs(10000); // 统计时长:10秒
rule.setTimeWindow(30); // 熔断时长:30秒
DegradeRuleManager.loadRules(Collections.singletonList(rule));

# 熔断策略说明:
# – SLOW_REQUEST_RATIO: 慢调用比例
# – ERROR_RATIO: 异常比例
# – ERROR_COUNT: 异常数

# 使用Dashboard配置
# 1. 点击 “簇点链路” -> 选择资源
# 2. 点击 “降级” -> 配置规则

# 查看规则
$ curl http://192.168.1.51:8080/v1/degrade/rules?app=fgedu-service

# 输出示例:
[
{
“id”: 1,
“app”: “fgedu-service”,
“resource”: “fgedu-api”,
“grade”: 0,
“count”: 1000,
“timeWindow”: 30,
“minRequestAmount”: 10,
“statIntervalMs”: 10000,
“slowRatioThreshold”: 0.5
}
]

5.3 热点参数限流

# 使用API配置热点规则
ParamFlowRule rule = new ParamFlowRule();
rule.setResource(“fgedu-api”);
rule.setCount(100); // 每秒最大请求数
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setParamIdx(0); // 参数索引

// 配置参数例外项
ParamFlowItem item = new ParamFlowItem();
item.setObject(“special-value”);
item.setClassType(String.class.getName());
item.setCount(1000); // 特殊值的阈值
rule.setParamFlowItemList(Collections.singletonList(item));

ParamFlowRuleManager.loadRules(Collections.singletonList(rule));

# 使用Dashboard配置
# 1. 点击 “簇点链路” -> 选择资源
# 2. 点击 “热点” -> 配置规则

# 查看规则
$ curl http://192.168.1.51:8080/v1/paramFlow/rules?app=fgedu-service

6. 集群配置

Sentinel支持集群流控模式,提供更精确的全局限流能力。更多学习教程www.fgedu.net.cn

6.1 集群流控架构

# 集群流控架构说明
# Token Server: 负责统计和令牌发放
# Token Client: 向Token Server请求令牌

# 部署模式:
# 1. 独立模式:Token Server独立部署
# 2. 嵌入模式:Token Server嵌入应用中

# Token Server配置
$ vi /opt/sentinel/token-server.properties

# 服务端口
csp.sentinel.api.port=8720

# 集群服务端口
csp.sentinel.server.port=8730

# 启动Token Server
$ java -Dcsp.sentinel.api.port=8720 \
-Dcsp.sentinel.server.port=8730 \
-Dproject.name=sentinel-token-server \
-jar sentinel-cluster-server-default-1.8.7.jar &

# 查看Token Server状态
$ curl http://192.168.1.51:8720/cluster/server/state

# 输出示例:
{
“port”: 8730,
“connection”: 10,
“state”: “READY”
}

6.2 客户端配置

# 客户端集群配置
ClusterClientConfig config = new ClusterClientConfig();
config.setRequestTimeout(1000); // 请求超时时间
ClusterClientConfigManager.applyNewConfig(config);

// 配置Token Server地址
ClusterClientAssignConfig assignConfig = new ClusterClientAssignConfig();
assignConfig.setServerHost(“192.168.1.51”);
assignConfig.setServerPort(8730);
ClusterClientConfigManager.applyNewAssignConfig(assignConfig);

// 配置集群流控规则
FlowRule rule = new FlowRule();
rule.setResource(“fgedu-cluster-api”);
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(1000); // 全局QPS限制
rule.setClusterMode(true); // 启用集群模式
FlowRuleManager.loadRules(Collections.singletonList(rule));

# 使用配置文件
$ vi application.yml

spring:
cloud:
sentinel:
transport:
dashboard: 192.168.1.51:8080
datasource:
flow:
nacos:
server-addr: 192.168.1.51:8848
data-id: ${spring.application.name}-flow-rules
group-id: SENTINEL_GROUP
rule-type: flow
cluster:
nacos:
server-addr: 192.168.1.51:8848
data-id: ${spring.application.name}-cluster-config
group-id: SENTINEL_GROUP
rule-type: cluster-config

风哥提示:集群流控适用于需要精确控制全局QPS的场景。建议Token Server独立部署,避免单点故障。

7. 安全配置

Sentinel提供了基本的安全框架,本节介绍常用的安全配置方法。学习交流加群风哥微信: itpux-com

7.1 配置认证

# 修改Dashboard认证配置
$ vi /opt/sentinel/application.properties

# 认证配置
sentinel.dashboard.auth.username=admin
sentinel.dashboard.auth.password=fgedu123

# Session超时时间
server.servlet.session.timeout=7200

# 重启Dashboard
$ pkill -f sentinel-dashboard
$ java -jar sentinel-dashboard-1.8.7.jar –spring.config.location=/opt/sentinel/application.properties &

# 使用API登录
$ curl -X POST “http://192.168.1.51:8080/auth/login” -d “username=admin&password=fgedu123”

# 输出示例:
{
“code”: 200,
“success”: true,
“data”: {
“username”: “admin”,
“password”: “******”
}
}

7.2 配置访问控制

# 配置Nginx反向代理
# vi /etc/nginx/conf.d/sentinel.conf

upstream sentinel-dashboard {
server 192.168.1.51:8080;
}

server {
listen 80;
server_name sentinel.fgedu.net.cn;

location / {
proxy_pass http://sentinel-dashboard;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

# 访问控制
allow 192.168.1.0/24;
deny all;
}
}

# 启动Nginx
# systemctl restart nginx

生产环境建议:生产环境建议修改默认密码,并配置网络访问控制限制Dashboard访问范围。

8. 监控与日志

Sentinel提供了完善的监控和日志功能,本节介绍常用的监控配置方法。更多学习教程公众号风哥教程itpux_com

8.1 Web管理控制台

# 访问管理控制台
# 浏览器访问: http://192.168.1.51:8080

# 主要功能:
# – 实时监控:查看QPS、响应时间、异常数
# – 簇点链路:查看资源调用链路
# – 流控规则:配置流量控制规则
# – 降级规则:配置熔断降级规则
# – 热点规则:配置热点参数限流
# – 系统规则:配置系统保护规则
# – 授权规则:配置黑白名单

# 查看实时监控数据
# 点击 “实时监控” -> 选择应用 -> 查看图表

# 查看资源详情
# 点击 “簇点链路” -> 选择资源 -> 查看详情

8.2 日志配置

# 查看日志
$ tail -f /data/sentinel/logs/sentinel-dashboard.log

# 输出示例:
2026-04-04 10:00:00,000 INFO [main] c.a.c.s.d.DashboardApplication – Starting Sentinel Dashboard
2026-04-04 10:00:01,000 INFO [main] c.a.c.s.d.DashboardApplication – Started Sentinel Dashboard

# 查看客户端日志
$ tail -f /data/sentinel/logs/sentinel-record.log

# 输出示例:
2026-04-04 10:00:00,000 INFO [main] c.a.c.s.Sentinel – Sentinel initialized successfully
2026-04-04 10:00:01,000 INFO [main] c.a.c.s.t.SimpleHttpHeartbeatSender – Begin heartbeat to server 192.168.1.51:8080

# 配置日志级别
$ vi /opt/sentinel/logback.xml



/data/sentinel/logs/sentinel-dashboard.log

/data/sentinel/logs/sentinel-dashboard.%d{yyyy-MM-dd}.log
30

%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} – %msg%n




8.3 监控指标

# 查看应用列表
$ curl http://192.168.1.51:8080/v1/app/list

# 输出示例:
[
{
“app”: “fgedu-service”,
“appType”: 0,
“activeConsole”: true
}
]

# 查看资源指标
$ curl “http://192.168.1.51:8080/v1/resource/metric?app=fgedu-service&resource=fgedu-api”

# 输出示例:
{
“resource”: “fgedu-api”,
“passQps”: 100,
“blockQps”: 10,
“successQps”: 90,
“exceptionQps”: 0,
“rt”: 10.5,
“count”: 1000
}

# 查看机器列表
$ curl “http://192.168.1.51:8080/v1/machine/list?app=fgedu-service”

# 输出示例:
[
{
“app”: “fgedu-service”,
“hostname”: “fgedudb01”,
“ip”: “192.168.1.100”,
“port”: 8719,
“lastHeartbeat”: 1712205600000
}
]

风哥提示:生产环境建议配置日志轮转和归档策略。定期检查流控规则和熔断状态。

9. 升级与迁移

Sentinel升级和迁移是运维工作中的重要环节,需要仔细规划和执行。from:www.itpux.com

9.1 版本升级

# 检查当前版本
$ java -jar sentinel-dashboard.jar –version
Sentinel Dashboard 1.8.7

# 备份配置
$ cp -r /opt/sentinel /backup/sentinel_$(date +%Y%m%d)

# 停止服务
$ pkill -f sentinel-dashboard

# 下载新版本
# wget https://github.com/alibaba/Sentinel/releases/download/1.9.0/sentinel-dashboard-1.9.0.jar

# 替换jar包
$ mv sentinel-dashboard-1.8.7.jar sentinel-dashboard-1.8.7.jar.bak
$ cp sentinel-dashboard-1.9.0.jar /opt/sentinel/

# 启动新版本
$ java -jar sentinel-dashboard-1.9.0.jar &

# 验证版本
$ java -jar sentinel-dashboard.jar –version
Sentinel Dashboard 1.9.0

9.2 规则迁移

# 导出规则
$ curl “http://192.168.1.51:8080/v1/flow/rules?app=fgedu-service” > /backup/sentinel/flow_rules.json
$ curl “http://192.168.1.51:8080/v1/degrade/rules?app=fgedu-service” > /backup/sentinel/degrade_rules.json

# 导入规则
$ curl -X POST “http://192.168.1.52:8080/v1/flow/rule” -H “Content-Type: application/json” -d @/backup/sentinel/flow_rules.json
$ curl -X POST “http://192.168.1.52:8080/v1/degrade/rule” -H “Content-Type: application/json” -d @/backup/sentinel/degrade_rules.json

# 使用Nacos持久化规则
# 配置Nacos数据源
spring:
cloud:
sentinel:
datasource:
flow:
nacos:
server-addr: 192.168.1.51:8848
data-id: ${spring.application.name}-flow-rules
group-id: SENTINEL_GROUP
rule-type: flow
degrade:
nacos:
server-addr: 192.168.1.51:8848
data-id: ${spring.application.name}-degrade-rules
group-id: SENTINEL_GROUP
rule-type: degrade

生产环境建议:升级前必须进行完整备份。建议先在测试环境验证兼容性,确保规则不丢失。

10. 生产环境实战案例

本节提供一个完整的生产环境配置案例,帮助读者更好地理解Sentinel的实际应用。更多学习教程www.fgedu.net.cn

10.1 生产环境完整配置

# 生产环境启动脚本
$ vi /opt/sentinel/start.sh

#!/bin/bash
JAVA_OPTS=”-server -Xms1g -Xmx1g -Xmn512m”
JAVA_OPTS=”${JAVA_OPTS} -XX:+UseG1GC -XX:MaxGCPauseMillis=200″
JAVA_OPTS=”${JAVA_OPTS} -Dserver.port=8080″
JAVA_OPTS=”${JAVA_OPTS} -Dcsp.sentinel.dashboard.server=192.168.1.51:8080″
JAVA_OPTS=”${JAVA_OPTS} -Dproject.name=sentinel-dashboard”
JAVA_OPTS=”${JAVA_OPTS} -Dsentinel.dashboard.auth.username=admin”
JAVA_OPTS=”${JAVA_OPTS} -Dsentinel.dashboard.auth.password=fgedu123″
JAVA_OPTS=”${JAVA_OPTS} -Dserver.servlet.session.timeout=7200″
JAVA_OPTS=”${JAVA_OPTS} -Dcsp.sentinel.log.dir=/data/sentinel/logs”
JAVA_OPTS=”${JAVA_OPTS} -Dsentinel.datasource.nacos.server-addr=192.168.1.51:8848″
JAVA_OPTS=”${JAVA_OPTS} -Dsentinel.datasource.nacos.namespace=sentinel”
JAVA_OPTS=”${JAVA_OPTS} -Dsentinel.datasource.nacos.group-id=SENTINEL_GROUP”

nohup java ${JAVA_OPTS} -jar /opt/sentinel/sentinel-dashboard-1.8.7.jar > /data/sentinel/logs/startup.log 2>&1 &

# 创建systemd服务
$ vi /etc/systemd/system/sentinel.service

[Unit]
Description=Sentinel Dashboard
After=network.target

[Service]
Type=simple
User=sentinel
Group=sentinel
ExecStart=/opt/sentinel/start.sh
ExecStop=/usr/bin/pkill -f sentinel-dashboard
Restart=on-failure

[Install]
WantedBy=multi-user.target

# 启用服务
# systemctl enable sentinel
# systemctl start sentinel

10.2 Spring Cloud集成

# Maven依赖

com.alibaba.cloud
spring-cloud-starter-alibaba-sentinel
2023.0.0.0

# application.yml配置
spring:
application:
name: fgedu-service
cloud:
sentinel:
transport:
dashboard: 192.168.1.51:8080
port: 8719
datasource:
flow:
nacos:
server-addr: 192.168.1.51:8848
data-id: ${spring.application.name}-flow-rules
group-id: SENTINEL_GROUP
rule-type: flow
degrade:
nacos:
server-addr: 192.168.1.51:8848
data-id: ${spring.application.name}-degrade-rules
group-id: SENTINEL_GROUP
rule-type: degrade

# 使用注解配置资源
@RestController
public class FgeduController {

@SentinelResource(value = “fgedu-api”, blockHandler = “handleBlock”, fallback = “handleFallback”)
@GetMapping(“/api/fgedu”)
public String fgeduApi(@RequestParam String param) {
// 业务逻辑
return “success”;
}

public String handleBlock(String param, BlockException ex) {
return “blocked: ” + ex.getClass().getSimpleName();
}

public String handleFallback(String param, Throwable ex) {
return “fallback: ” + ex.getMessage();
}
}

10.3 流控策略实战

# 常用流控策略配置

# 1. QPS限流
FlowRule qpsRule = new FlowRule(“fgedu-api”);
qpsRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
qpsRule.setCount(100);

# 2. 并发线程数限流
FlowRule threadRule = new FlowRule(“fgedu-api”);
threadRule.setGrade(RuleConstant.FLOW_GRADE_THREAD);
threadRule.setCount(50);

# 3. Warm Up模式
FlowRule warmUpRule = new FlowRule(“fgedu-api”);
warmUpRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
warmUpRule.setCount(100);
warmUpRule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_WARM_UP);
warmUpRule.setWarmUpPeriodSec(10);

# 4. 排队等待模式
FlowRule queueRule = new FlowRule(“fgedu-api”);
queueRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
queueRule.setCount(100);
queueRule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER);
queueRule.setMaxQueueingTimeMs(500);

# 5. 关联限流
FlowRule relateRule = new FlowRule(“fgedu-api”);
relateRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
relateRule.setCount(100);
relateRule.setStrategy(RuleConstant.STRATEGY_RELATE);
relateRule.setRefResource(“fgedu-write-api”);

# 6. 系统保护规则
SystemRule systemRule = new SystemRule();
systemRule.setHighestSystemLoad(10); // 最大Load
systemRule.setHighestCpuUsage(0.8); // 最大CPU使用率
systemRule.setAvgRt(1000); // 最大平均响应时间
systemRule.setMaxThread(100); // 最大并发线程数
systemRule.setQps(1000); // 最大入口QPS
SystemRuleManager.loadRules(Collections.singletonList(systemRule));

风哥提示:Sentinel作为微服务稳定性保障组件,在流量控制和熔断降级方面具有优势。建议根据业务场景选择合适的流控策略,并配置规则持久化。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息