Sentinel Spring Cloud 微服务接口限流示例
博主介绍的这个项目基于 Sentinel 实现 Spring Cloud 微服务接口限流功能,演示如何使用 Sentinel 进行接口限流配置和测试,并通过 Nacos 实现规则持久化。
代码下载地址
https://cloud.189.cn/t/6v6VFz3YRBjy(访问码:ipp3)
技术栈
以下版本经过严格适配性验证,不要轻易调整版本!!!
- Spring Boot 2.0.6
- Spring Cloud Finchley.SR2
- Sentinel 1.7.0
- Nacos 1.1.4
- Docker
项目结构
sentinel-springcloud-demo/ ├── src/ │ └── main/ │ ├── java/com/zhangxueliang/demo/ │ │ ├── Application.java # 应用主类(含 Nacos 数据源配置) │ │ └── TestController.java # 测试控制器(带限流注解) │ └── resources/ │ └── application.yml # 应用配置(含 Nacos 配置) ├── target/ # 构建输出目录 ├── deploy-sentinel.sh # Sentinel Dashboard 部署脚本 ├── sentinel-compose.yml # Sentinel Dashboard Docker 配置 ├── deploy-nacos.sh # Nacos 部署脚本 ├── nacos-compose.yml # Nacos Docker 配置(含认证) ├── pom.xml # Maven 依赖配置 └── README.md # 项目说明文档快速开始
1. 部署 Sentinel Dashboard
方法一:使用部署脚本
# 在 Windows PowerShell 中执行bashdeploy-sentinel.sh方法二:直接使用 Docker Compose
docker-compose-f sentinel-compose.yml up -d2. 部署 Nacos(用于规则持久化)
方法一:使用部署脚本
# 在 Windows PowerShell 中执行bashdeploy-nacos.sh方法二:直接使用 Docker Compose
docker-compose-f nacos-compose.yml up -d3. 构建并运行 Java 应用
# 构建项目mvn clean package# 设置 Sentinel Dashboard 地址(替换为实际 IP)exportSENTINEL_DASHBOARD_ADDR=192.30.0.95:8858# 运行应用java -jar target/sentinel-springcloud-demo-1.0-SNAPSHOT.jar4. 测试接口
触发接口调用(Sentinel 采用懒加载机制,需要先调用接口):
# 多次调用接口,触发 Sentinel 监控curlhttp://localhost:8080/api/test测试限流效果:
# 快速连续调用接口,测试限流效果for((i=1;i<=10;i++));docurlhttp://localhost:8080/api/testecho""doneSentinel Dashboard 配置
访问地址
- 地址:http://192.30.0.95:8858
- 用户名:sentinel
- 密码:sentinel
配置限流规则
- 登录 Sentinel Dashboard
- 在左侧菜单选择 “簇点链路”
- 找到 “test” 资源(由 @SentinelResource(value = “test”) 定义)
- 点击右侧的 “流控” 按钮
- 配置限流规则(例如:QPS=2)
规则持久化
配置的规则会自动持久化到 Nacos,应用重启后规则依然有效。
Nacos 配置信息:
- 地址:http://192.30.0.95:8848
- 用户名:nacos
- 密码:nacos
- 命名空间:public
- 配置ID:sentinel-springcloud-demo-flow-rules
- 配置组:SENTINEL_GROUP
配置说明
1. application.yml 配置
spring:application:name:sentinel-springcloud-demoserver:port:8080# Sentinel 配置spring.cloud.sentinel:transport:# Sentinel Dashboard 服务器地址dashboard:${SENTINEL_DASHBOARD_ADDR:192.30.0.95:8858}# Sentinel 客户端与 Dashboard 通信端口port:8719datasource:flow:nacos:server-addr:192.30.0.95:8848data-id:sentinel-springcloud-demo-flow-rulesgroup-id:SENTINEL_GROUPrule-type:flow2. 环境变量配置
| 环境变量 | 说明 | 默认值 |
|---|---|---|
| SENTINEL_DASHBOARD_ADDR | Sentinel Dashboard 服务器地址 | 192.30.0.95:8858 |
3. 网络配置
- Sentinel Dashboard 端口:8858(Web 访问端口)
- Sentinel 通信端口:8719(Dashboard 与客户端通信端口)
- Java 应用端口:8080(应用访问端口)
- Nacos 端口:8848(配置中心端口)
跨服务器部署
如果 Java 应用、Sentinel Dashboard 和 Nacos 部署在不同服务器:
1. 在 Java 应用服务器上设置环境变量
# Linux/macOSexportSENTINEL_DASHBOARD_ADDR=sentinel服务器IP:8858# Windows PowerShell$env:SENTINEL_DASHBOARD_ADDR="sentinel服务器IP:8858"2. 网络连通性要求
- Java 应用服务器能够访问 Sentinel Dashboard 服务器的 8858 端口
- Sentinel Dashboard 服务器能够访问 Java 应用服务器的 8719 端口
- Java 应用服务器能够访问 Nacos 服务器的 8848 端口
常见问题排查
1. 应用在 Sentinel Dashboard 中显示失联
可能原因:
- 网络连通性问题
- 端口被占用
- 环境变量配置错误
解决方法:
- 检查网络连通性:
ping sentinel服务器IP - 检查端口是否可访问:
telnet sentinel服务器IP 8858 - 检查 Java 应用服务器的 8719 端口是否开放:
netstat -an | findstr 8719 - 确认 Docker 网络配置为 host 模式(在 sentinel-compose.yml 中)
2. 在 Sentinel Dashboard 中看不到接口
可能原因:
- 接口未被调用过(Sentinel 采用懒加载机制)
- @SentinelResource 注解配置错误
- AspectJ 依赖缺失
解决方法:
- 先调用接口:
curl http://localhost:8080/api/test - 检查 @SentinelResource 注解配置
- 确保添加了 spring-boot-starter-aop 依赖
3. 限流规则不生效
可能原因:
- 规则配置错误
- 接口调用方式与规则不匹配
- Sentinel 客户端与 Dashboard 通信异常
- Nacos 配置中心连接失败
解决方法:
- 检查规则配置是否正确
- 确保使用相同的资源名称进行配置
- 检查 Sentinel Dashboard 中的应用状态是否为 “在线”
- 检查 Nacos 服务是否正常运行
- 检查 application.yml 中的 Nacos 配置是否正确
4. Nacos 认证错误 “user not found!”
可能原因:
- Nacos 认证配置错误
- 客户端与服务器版本不匹配
解决方法:
- 确认 Nacos 服务版本与客户端版本匹配(本项目使用 Nacos 1.1.4)
- 检查 nacos-compose.yml 中的认证配置
- 确保 application.yml 中配置了正确的 Nacos 连接信息
部署脚本说明
1. sentinel-compose.yml
Sentinel Dashboard 的 Docker 部署配置,使用 host 网络模式确保与外部 Java 应用通信。
2. deploy-sentinel.sh
Sentinel Dashboard 部署脚本,包含容器管理、状态检查和访问信息输出。
3. nacos-compose.yml
Nacos 服务的 Docker 部署配置,包含认证配置。
4. deploy-nacos.sh
Nacos 服务部署脚本,包含容器管理、状态检查和访问信息输出。
5. docker-compose.yml
完整部署配置,包含 Sentinel Dashboard、Nacos 和 Java 应用的联合部署。
测试结果
正常响应
Hello, Sentinel!限流响应
请求过于频繁,请稍后再试!监控与管理
- Sentinel Dashboard:http://192.30.0.95:8858
- Nacos 配置中心:http://192.30.0.95:8848
- 应用接口:http://localhost:8080/api/test
参考文档
- Sentinel 官方文档
- Spring Cloud Alibaba Sentinel 文档
- Nacos 官方文档