Sentinel 笔记
Sentinel 笔记
1 介绍
Sentinel 是阿里开源的分布式系统流量防卫组件,专注于 流量控制、熔断降级、系统保护。
官网:https://sentinelguard.io/zh-cn/index.html
wiki:https://github.com/alibaba/Sentinel/wiki
对比同类产品:
| 产品 | 特点 |
|---|---|
| Hystrix | Netflix 开源,功能全面但已停止维护,基于线程池隔离,资源消耗较大 |
| Resilience4j | 轻量级,基于函数式编程,但需要结合其他组件实现完整功能 |
| Sentinel | 轻量级,实时监控和控制,支持动态规则配置,与 Spring Cloud 深度集成 |
2 架构

- 核心模块:
- 资源:被保护的代码逻辑(如接口、方法)。
- 规则:流量控制、熔断降级等策略。
- 控制台:可视化规则配置与实时监控。
4 环境搭建
4.1 依赖
<!-- Spring Cloud Alibaba Sentinel -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
4.2 启动控制台
-
下载 Sentinel Dashboard 官方 Release或📎sentinel-dashboard-1.8.8.jar
-
启动命令:
下载完成后:在文件目录输入cmd进入bash命令行
在命令行窗口输入:即可启动项目
java -jar sentinel-dashboard-1.8.8.jar
3.通过http://localhost:8080即可访问sentinel的控制台

正常访问后显示的界面:

4.3 配置连接
在 application.yml 中配置:
# 订单以及商品都要配置
spring:cloud:sentinel:transport:dashboard: localhost:8080 # 控制台地址eager: true # 立即初始化
配置成功后:

假设我们要把createOrder注册为我们要管理的服务。
@SentinelResource(value = "createOrder")public Order createOrder(Long userId, Long productId) {//Product product = productFeignClient.getProductById(productId);//使用RestTemplate实现负载均衡//Product product = getProductFromRemqteWithLoadBalanceAnnotation(productId);//使用feignClient实现远程调用Product product = productFeignClient.getProductById(productId);Order order = new Order();order.setId(1L);order.setTotalAmount(product.getPrice().multiply(new BigDecimal(product.getNum())));//order.setTotalAmount(BigDecimal.valueOf(0));order.setUserId(userId);order.setNickName("zhangsan");order.setAddress("尚硅谷");order.setProductList(Arrays.asList(product));return order;}
创建订单的请求:http://localhost:8000/order/create?userId=1&productId=100

接下来就可以对资源进行流控。
QPS:每秒能接收的请求数
5 异常处理

5.1 自定义 BlockExceptionHandler
目的:处理业务异常,出现异常可以给前端传递一些消息。
实现 BlockExceptionHandler 接口,处理流控/熔断异常:
// order模块下
@Component
public class MyBlockExceptionHandler implements BlockExceptionHandler {private ObjectMapper objectMapper = new ObjectMapper();@Overridepublic void handle(HttpServletRequest request, HttpServletResponse response,String resourceName, BlockException e) throws Exception {response.setStatus(429); //too many requestsresponse.setContentType("application/json;charset=utf-8");PrintWriter writer = response.getWriter();R error = R.error(500, resourceName + " 被Sentinel限制了,原因:" + e.getClass());String json = objectMapper.writeValueAsString(error);writer.write(json);writer.flush();writer.close();}
}
5.2 blockHandler
使用 @SentinelResource 注解指定降级方法:
@SentinelResource(value = "createOrder",blockHandler = "createOrderFallback")@Overridepublic Order createOrder(Long productId, Long userId) {
// Product product = getProductFromRemoteWithLoadBalanceAnnotation(productId);//使用Feign完成远程调用Product product = productFeignClient.getProductById(productId);Order order = new Order();order.setId(1L);// 总金额order.setTotalAmount(product.getPrice().multiply(new BigDecimal(product.getNum())));order.setUserId(userId);order.setNickName("zhangsan");order.setAddress("尚硅谷");//远程查询商品列表order.setProductList(Arrays.asList(product));return order;}//出现异常,兜底回调public Order createOrderFallback(Long productId, Long userId, BlockException e){Order order = new Order();order.setId(0L);order.setTotalAmount(new BigDecimal("0"));order.setUserId(userId);order.setNickName("未知用户");order.setAddress("异常信息:"+e.getClass());return order;}
//没自定义异常,就会自动向上抛,最后给Spring的全局拦截器捕获到,由spring去处理异常
5.3 OpenFeign-兜底回调
- 实现 Fallback 类:
@FeignClient(value = "service-product",fallback = ProductFeignClientFallback.class) // feign客户端
public interface ProductFeignClient {//mvc注解的两套使用逻辑//1、标注在Controller上,是接受这样的请求//2、标注在FeignClient上,是发送这样的请求@GetMapping("/product/{id}")Product getProductById(@PathVariable("id") Long id);}
2.在 Feign 接口中指定:
@FeignClient(name = "user-service", fallback = UserServiceFallback.class)
public interface UserService { /* ... */ }
6 规则 - 流量控制

6.1 阈值类型
- QPS:每秒请求数。
- 线程数:并发线程数。
6.2 流控模式

- 直接:针对当前资源。
- 关联:关联资源触发阈值时限流。
- 链路:基于调用链路限流。
6.3 流控效果

- 快速失败:直接拒绝请求。
- Warm Up:预热模式,逐步增加阈值。
- 排队等待:请求进入队列等待处理。
7 规则 - 熔断降级
7.1 断路器状态

- Closed:正常状态。
- Open:熔断状态,拒绝所有请求。
- Half-Open:尝试放行部分请求探测恢复情况。
7.2 工作原理

- 慢调用比例:响应时间超过阈值且比例超限。
- 异常比例:异常比例超限。
- 异常数:异常数超限。
7.3 熔断与兜底

8 规则 - 热点参数

8.1 环境搭建
- 添加热点参数限流规则:
@GetMapping("/seckill")@SentinelResource(value = "seckill-order",fallback = "seckillFallback")public Order seckill(@RequestParam(value = "userId",required = false) Long userId,@RequestParam(value = "productId",defaultValue = "1000") Long productId){Order order = orderService.createOrder(productId, userId);order.setId(Long.MAX_VALUE);return order;}public Order seckillFallback(Long userId,Long productId, BlockException exception){System.out.println("seckillFallback....");Order order = new Order();order.setId(productId);order.setUserId(userId);order.setAddress("异常信息:"+exception.getClass());return order;}
重点总结
- 核心功能:
- 流量控制(QPS/线程数)、熔断降级(慢调用/异常比例)、热点参数限流。
- 优势:
- 动态规则配置,实时监控,与 Spring Cloud 无缝集成。
- 实操关键:
- 控制台启动后需配置
spring.cloud.sentinel.transport.dashboard。 - 使用
@SentinelResource定义资源和降级逻辑。 - OpenFeign 需结合 Fallback 类实现服务降级。
- 控制台启动后需配置
- 注意事项:
- 规则配置后需持久化到 Nacos/Redis,避免重启丢失。
- 生产环境建议开启 Sentinel 的集群流控功能。
相关文章:
Sentinel 笔记
Sentinel 笔记 1 介绍 Sentinel 是阿里开源的分布式系统流量防卫组件,专注于 流量控制、熔断降级、系统保护。 官网:https://sentinelguard.io/zh-cn/index.html wiki:https://github.com/alibaba/Sentinel/wiki 对比同类产品࿱…...
使用 vxe-table 导出 excel,支持带数值、货币、图片等带格式导出
使用 vxe-table 导出 excel,支持带数值、货币、图片等带格式导出,通过官方自动的导出插件 plugin-export-xlsx 实现导出功能 查看官网:https://vxetable.cn gitbub:https://github.com/x-extends/vxe-table gitee:htt…...
powershell@宝塔面板批量建站脚本@批量设置@批量部署伪静态设置
文章目录 abstract批量设置 abstract 对于需要大量建站,并且站点类型都很接近的宝塔用户,可以考虑使用如下powershell脚本进行批量建站语句生成 请根据宝塔的要求的批量建站语句格式创建脚本 例如 function Get-BatchSiteBuilderLines {<# .SYNOPSIS获取批量站点生成器的…...
基于multisim的自动干手器设计与仿真
1 设计的任务与要求 设计一个输出 5V 的直流稳压电源。用开关的闭合模拟手挡住光线的功能。用灯的亮灭模拟烘干吹风功能。 2 方案论证与选择 2.1 自动干手器的系统方案 本设计由5V直流电源、红外发射电路、红外接收电路、灯模拟电路构成。 1. 5V直流电源系统 这一部分是整…...
webflux响应式编程
webflux&webclient 尚硅谷SpringBoot响应式编程教程,最新springboot3入门到实战 响应式编程设计实战及SpringWebFlux源码剖析 - 拉勾 文章目录 前置知识1、Lambda2、Function3、StreamAPI中间操作:Intermediate Operations终止操作:Ter…...
关于tresos Studio(EB)的MCAL配置之GPT
概念 GPT,全称General Purpose Timer,就是个通用定时器,取的名字奇怪了点。定时器是一定要的,要么提供给BSW去使用,要么提供给OS去使用。 配置 General GptDeinitApi控制接口Gpt_DeInit是否启用 GptEnableDisable…...
JavaScript基础-比较运算符
在JavaScript编程中,比较运算符用于比较两个值,并返回一个布尔值(true或false),这对于我们进行条件判断和逻辑控制至关重要。掌握这些运算符不仅有助于编写高效的代码,也是处理复杂逻辑的基础。本文将详细介…...
Uniapp项目运行到微信小程序、H5、APP等多个平台教程
摘要:Uniapp作为一款基于Vue.js的跨平台开发框架,支持“一次开发,多端部署”。本文将手把手教你如何将Uniapp项目运行到微信小程序、H5、APP等多个平台,并解析常见问题。 一、环境准备 在开始前,请确保已安装以下工具…...
《加快应急机器人发展的指导意见》中智能化升级的思考——传统应急设备智能化升级路径与落地实践
感谢阅读本次内容分享,下面我将解读分析《加快应急机器人发展的指导意见》,喜欢的点赞支持一下呗~(日更真的很辛苦~),欢迎评论区留言讨论,你们的发言我都会看到~ 《加快应急机器人发展的指导意见》中智能化升级的思考——传统应急…...
Java基础知识大全(含答案,面试基础)
对于初学者来说,掌握Java的基础知识是成为一名优秀Java开发者的第一步。而对于经验丰富的开发者,扎实的基础同样是继续深入学习、攻克更高难度技术的基础。因此,在面试和实际工作中,Java的基础知识不仅是评估开发者能力的标准&…...
将长上下文大语言模型研究从输入转向输出
将长上下文大语言模型研究从输入转向输出 摘要: 近年来,长上下文大语言模型(LLMs)的研发主要集中在处理更长的输入文本上,这使得模型在理解长篇内容时取得了显著进步。然而,生成长篇输出的研究却相对被忽视ÿ…...
C/C++蓝桥杯算法真题打卡(Day4)
一、P11041 [蓝桥杯 2024 省 Java B] 报数游戏 - 洛谷 算法代码: #include<bits/stdc.h> using namespace std;// 计算第 n 个满足条件的数 long long findNthNumber(long long n) {long long low 1, high 1e18; // 二分查找范围while (low < high) {lo…...
正则表达式(2)匹配规则
正则表达式的匹配规则定义了如何识别字符串中的特定模式。这些规则包括字符类匹配、元字符匹配、数量词、字符转义和分组。 字符类匹配 字符类匹配允许你指定一个字符集合,并匹配该集合中的任意单个字符。这是通过方括号 [] 来实现的。 简单字符类:[abc…...
详解动态规划算法
动态规划 一、动态规划的核心思想二、动态规划的步骤1. 定义状态(State)2. 确定状态转移方程(State Transition Equation)3. 确定边界条件(Base Case)4. 填表(Table Filling)或递归计…...
DTO 命名规范指南
在项目实践中,将查询对象和返回对象都使用 DTO 后缀是可以的,但通常有更清晰的命名规范,帮助区分两者的作用。 🚨 推荐的命名规范 请求数据(查询参数、请求体等) → 使用 Request / Query 后缀返回数据&a…...
C++编写Redis客户端
目录 安装redis-plus-plus库 编辑 编译Credis客户端 redis的通用命令使用 get/set exists del keys expire /ttl type string类型核心操作 set和get set带有超时时间 set带有NX string带有XX mset mget getrange和setrange incr和decr list类型核心操作…...
数据开发面试: 项目介绍示例
快照表 快照表(Snapshot Table)是数据仓库中用来存储某一时间点的数据状态的表。这种表通常包含在特定时间点上业务实体的静态数据,它记录了业务在某一特定时刻的“快照”视图。快照表通常用于存储那些不经常变化的数据,或者即使…...
记录一下Django的密码重置(忘记密码)
一. Django默认的密码重置 1.路由 # url.pyfrom django.contrib.auth import views as auth_viewsurlpatterns [# 密码重置path(password_reset/, auth_views.PasswordResetView.as_view(), namepassword_reset),# 用户输入邮箱后,跳转到此页面path(password_res…...
【运维篇】KubeSphere-02(经验汇总)
一、使用建议 1.对于数据库、对像存储比较重的要不能丢失,有异地存储备份需求的有状态服务,不建议采用k8s进行部署,会导致运维难度更大。 2.对于中间件如redis、MQ、harbor、seata、nacos、zookeeper可采用k8s部署。 3.对于无状态服务tomc…...
MySQL 5.7.40 主从同步配置教程
MySQL 主从同步能有效提升数据冗余备份与负载均衡。下面我将以 MySQL 5.7.40 版本为例,详细讲解如何进行主从同步配置。 MySQL 5.7.40 主从同步配置教程 一、环境准备 假设我们有两台服务器,一台作为主服务器(Master)ÿ…...
Qt:多线程
目录 初识Qt多线程 QThread常用API QThread的使用 Qt中的锁 条件变量和信号量 初识Qt多线程 Qt 多线程 和 Linux 中的线程本质是一个东西 Linux 中学过的 多线程 APl,Linux 系统提供的 pthread 库 Qt 中针对系统提供的线程 API 重新封装了 C11 中,…...
算法系列之广度优先搜索解决妖怪和尚过河问题
在算法学习中,广度优先搜索(BFS)是一种常用的图搜索算法,适用于解决最短路径问题、状态转换问题等。本文将介绍如何利用广度优先搜索解决经典的“妖怪和尚过河问题”。 问题描述 有三个妖怪和三个和尚需要过河。他们只有一条小船…...
详解常用集合和映射中的线程安全问题
1. 前言 在 Java 中,集合和映射是常用的数据结构,它们分为线程安全和线程不安全两类。我们常用的集合包括:ArrayList、HashSet、CopyOnWriteArrayList、CopyOnWriteArraySet。常用的映射包括:HashMap、ConcurrentHashMap、Hashta…...
计算机毕业设计SpringBoot+Vue.js车辆管理系统(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
【js逆向】iwencai国内某金融网站实战
地址:aHR0cHM6Ly93d3cuaXdlbmNhaS5jb20vdW5pZmllZHdhcC9ob21lL2luZGV4 在搜索框中随便输入关键词 查看请求标头,请求头中有一个特殊的 Hexin-V,它是加密过的;响应数据包中全是明文。搞清楚Hexin-V的值是怎么生成的,这个值和cooki…...
安卓设备root检测与隐藏手段
安卓设备root检测与隐藏手段 引言 安卓设备的root权限为用户提供了深度的系统控制能力,但也可能带来安全风险。因此,许多应用(如银行软件、游戏和流媒体平台)会主动检测设备是否被root,并限制其功能。这种对抗催生了ro…...
【音视频 | AAC】AAC编码库faac介绍、使用步骤、例子代码
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...
Unity摄像机跟随物体
功能描述 实现摄像机跟随物体,并使物体始终保持在画面中心位置。 实现步骤 创建脚本:在Unity中创建一个新的C#脚本,命名为CameraFollow。 代码如下: using UnityEngine;public class CameraFollow : MonoBehaviour {public Tran…...
dp_走方格(包含dfs分析,记忆化搜索)
类似题目解析:dp_最长上升子序列(包含dfs分析,记忆化搜索)-CSDN博客 题目链接:2067. 走方格 - AcWing题库 题目图片: 分析题目(dfs) 这个题目说有一个行为n行,列为m列…...
软考 中级软件设计师 考点笔记总结 day01
文章目录 软考1.0上午考点下午考点 软考1.11、数值及其转换2、计算机内数据表示2.1、定点数 - 浮点数2.2、奇偶校验 和 循环冗余校验 (了解)2.3、海明码 (掌握)2.4、机器数 软考1.0 上午考点 软件工程基础知识: 开发模型、设计原则、测试方…...
