1、添加Sentinel依赖
Springboot版本、SpringCloud版本和SpringCloudAlibaba的版本他们是有对应关系的,具体对应关系如下:
1) Spring Boot 3.x 系列
| SpringBoot | SpringCloud | SpringCloudAlibaba | Sentinel | 说明 |
|---|---|---|---|---|
| 3.2.x | 2023.0.x | 2023.0.x | 1.8.7+ | 最新稳定版 |
| 3.1.x | 2022.0.x | 2022.0.0.0 | 1.8.6+ | 推荐生产使用 |
| 3.0.x | 2022.0.x | 2022.0.0.0-RC2 | 1.8.5+ | 早期 3.0 版本 |
2)**Spring Boot 2.7.x 系列(主流稳定)**
| SpringBoot | SpringCloud | SpringCloudAlibaba | Sentinel | 说明 |
|---|---|---|---|---|
| 2.7.18 | 2021.0.9 | 2021.0.8.0 | 1.8.6 | LTS 长期支持版 |
| 2.7.x | 2021.0.x | 2021.0.5.0 | 1.8.5+ | 生产推荐 |
| 2.7.0 | 2021.0.3 | 2021.0.4.0 | 1.8.4 | 初始版本 |
3) Spring Boot 2.6.x 系列
| SpringBoot | SpringCloud | SpringCloudAlibaba | Sentinel | 说明 |
|---|---|---|---|---|
| 2.6.14 | 2021.0.8 | 2021.0.5.0 | 1.8.5 | 兼容版本 |
| 2.6.x | 2021.0.x | 2021.0.4.0 | 1.8.4 | 旧项目维护 |
4) Spring Boot 2.5.x 及以下
| SpringBoot | SpringCloud | SpringCloudAlibaba | Sentinel | 说明 |
|---|---|---|---|---|
| 2.5.x | 2020.0.x | 2021.1 | 1.8.3 | 逐步淘汰 |
| 2.4.x | 2020.0.x | 2021.1 | 1.8.2 | 旧版本 |
| 2.3.x | Hoxton | 2.2.8.RELEASE | 1.8.1 | 不推荐新项目 |
| 2.2.x | Hoxton | 2.2.7.RELEASE | 1.8.0 | 已过时 |
我们以SpringBoot2.7.18为例,添加依赖如下:
<!-- SpringCloud 微服务 -->
<properties>
<spring-boot.version>2.7.18</spring-boot.version>
<spring-cloud.version>2021.0.9</spring-cloud.version>
<spring-cloud-alibaba.version>2021.0.6.1</spring-cloud-alibaba.version>
</properties>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SpringCloud Alibaba 微服务 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>${spring-cloud-alibaba.version}</version>
</dependency>
2、修改配置文件
# Spring
spring:
cloud:
sentinel:
# 取消控制台懒加载
eager: true
transport:
# 控制台地址
dashboard: 192.168.80.192:8858
3、定义全局异常类
package com.ruoyi.system.config;
import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.BlockExceptionHandler;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.flow.FlowException;
import com.alibaba.fastjson.JSON;
import com.ruoyi.common.core.web.domain.AjaxResult;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author 军哥
* @version 1.0
* @description: TODO
* @date 2026/1/30 8:37
*/
@Component
public class GlobalSentinelBlockHandler implements BlockExceptionHandler {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws IOException {
// 1. 构建统一返回结果
AjaxResult result = AjaxResult.error();
if (e instanceof FlowException) {
result.put("code", 429);
result.put("msg", "全局提示:接口访问过于频繁,请稍后再试!");
} else {
result.put("code", 500);
result.put("msg", "全局提示:服务异常,请联系管理员!");
}
result.put("data", null);
result.put("timestamp", System.currentTimeMillis());
// 2. 设置响应格式(JSON)和编码
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
response.setCharacterEncoding("UTF-8");
response.setStatus(200); // 避免返回4xx/5xx状态码,前端可统一解析
// 3. 写入响应结果
response.getWriter().write(JSON.toJSONString(result));
}
}
4、在接口上添加注解@SentinelResource
@RequiresPermissions("system:order:add")
@Log(title = "消费者下单(使用购物车下单)", businessType = BusinessType.INSERT)
@PostMapping("/addOrderByCar")
@SentinelResource(value = "addOrderByCar")
public AjaxResult addOrderByCar()
{
return tbOrderService.addOrderByCar();
}
5、在Sentinel控制台添加流控规则


6、实际测试
