Spring Cloud Alibaba学习 3- Sentinel入门使用
Spring Cloud Alibaba学习 3- Sentinel入门使用
中文文档参考:Sentinel中文文档
一. SpringCloud整合Sentinel
1.1 下载Sentinel-Dashboard
Sentinel下载地址:Sentinel-Dashboard
到下载目录,cmd输入
java -jar sentinel-dashboard-1.8.8.jar
如果8080端口被占用,可以指定其他端口
java -jar sentinel-dashboard-1.8.6.jar --server.port=8082
如果不指定账号和密码,则都是sentinel
初次访问的时候发现什么都没有,只有在首次在程序中调用Sentinel资源时,F5刷新后才会有东西

1.2 引入Sentinel相关依赖
在公共模块中引入Sentinel相关依赖
<!-- Sentinel -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
1.3 配置Sentinel客户端
spring:cloud:# sentinelsentinel:transport:dashboard: localhost:8080 # dashboard地址port: 8080 # Sentinel地址# nacosnacos:server-addr: 127.0.0.1:8848 # Nacos客户端discovery:cluster-name: order #集群名namespace: public #命名空间service: order #服务名metadata: #服务元数据,会给每个实例都配置对应的元数据name: orderServiceconfig:server-addr: 127.0.0.1:8848 # Nacos作为配置中心地址namespace: devgroup: orderservicefile-extension: yml # 指定 yml 格式的配置import-check:enabled: false # 禁用导入检查refresh-enabled: true # 用 application.yml作为Nacos配置中心的配置文件需要配置如下config:import:- optional:nacos:${spring.application.name}.${spring.cloud.nacos.config.file-extension}
server:port: 8081
1.4 配置Sentinel资源
用@SentinelResource配置到Controller的接口方法上,不配置也可以,Sentinel会自动监听所有的Controller的接口方法
@RestController
@RequestMapping("/order")
public class OrderController {@Autowiredpublic DiscoveryClient client;@Autowiredprivate GoodClient goodClient;@SentinelResource@GetMapping("output")public void output(ServletResponse response) {HttpServletResponse res = (HttpServletResponse) response;try {res.getWriter().write("ABCDEFG");} catch (IOException e) {throw new RuntimeException(e);}}
}
请求
http://localhost:8081/order/output
查看Sentinel控制台,已经有了应用,整合成功

二. Sentinel使用配置
参考前辈最后一支迷迭香的文章SpringCloud Alibaba微服务-- Sentinel的使用(保姆级)-CSDN博客
1. 流控规则
1.1 参数介绍

- 资源名
接口访问的URL
- 针对来源
服务的调用者,默认为defalut所有来源
- 阈值类型
QPS:接口每秒的访问量
并发线程数:调用的线程数
- 单机阈值
阈值类型对应的值
- 流控模式
直接:只要达到了流控标准,就会限流当前资源
关联:当关联的资源达到了流控标准,就会限流当前资源
链路:当从入口资源去调用某个@SentinelResource指定的资源达到了流控标准,就会限流当前入口资源对该资源的调用
- 流控效果
快速失败:直接抛出错误
Warm Up:根据预热因子和指定的预热时间,慢慢增加接收的流量直到达到阈值
排队等待:匀速排队接收流量
1.2 流控规则演示
1.2.1 直接流控演示
正常访问接口http://localhost:8081/order/output时,会在浏览器输出ABCDEFG

配置了下图规则

快速F5刷新页面,会触发流控

1.2.2 关联流控演示
在当前接口创建了测试关联流控的接口
@GetMapping("/testRelated")
public String testRelated() {return "hello";
}
配置了下图规则

快速请求关联资源,当前接口被流控


1.2.3 链路流控演示
在配置文件中关闭sentinel对同一个Controller里所有方法的整合,这样不会把所有方法放在一个链路里(链路流控无效)
sentinel:transport:dashboard: localhost:8080 # dashboard地址port: 8080 # Sentinel地址# 关闭整合web-context-unify: false
可以看到,现在每个方法都是一个链路

OrderController接口方法如下,重点记住要给被链路流控的资源加上@SentinelResource(“xxx”),这样该接口才会作为入口资源下的链路!!
@RestController
@RequestMapping("/order")
@Slf4j
@RefreshScope
public class OrderController {@SentinelResource("resource")@GetMapping("/testRelated")public String testRelated() {return "hello";}@GetMapping("/testFeign")public void testFeign() {testRelated();}
}
可以看到,控制台已经将 resource 资源置于 /order/testFeign链路下了

接着在Sentinel控制台配置了下图规则

直接访问localhost:8081/order/testRelated,快速刷新,依然可以看到正常返回

访问localhost:8081/order/testFeign,快速刷新,报错,这是由于从/order/testFeign链路下的resource被流控了抛出的错误

2. 熔断规则
2.1 参数介绍

- 熔断器状态
熔断器类似一个开关,有 全开、半开、关闭 三个状态
全开(OPEN):正常接收请求
半开(HALF_OPEN):熔断器在指定的熔断时长后,进入半开状态,此时会发送一个探测请求,如果此次请求成功,则进入关闭状态,否则退回全开状态,等待下一个熔断时长结束再进行探测。
关闭(CLOSED):当处于关闭状态时,请求均可以通过。
- 熔断策略
熔断器都是根据一段统计时间的请求的状况来进行状态切换的。
1. 慢调用比例
最大RT:RT 表示 Reponse time,即最大响应时间,当超过了设置的时间就会算作一个请求无效
比例阈值:当超过设定的比例阈值(百分之几)的请求都是慢调用的时候,就会触发熔断
2. 异常比例
比例阈值:当超过设定的比例阈值(百分之几)的请求都出现异常的时候,就会触发熔断
3. 异常数
异常数:当异常请求数超过了设定的异常数时,就会触发熔断
- 熔断时长
顾名思义,熔断器在触发熔断策略后,进入熔断状态(关闭状态)的时长
- 最小请求数
只有请求超过了最小请求数之后,才会开始进入统计时长
- 统计时长
熔断策略中的指标都是在指定的一段统计时长进行统计
2.2 熔断演示
这里只拿慢调用比例来演示,其他的也都差不多,要演示熔断,需要用到压测工具,apipost、jmeter都是好用的压测工具,这里就直接用 apipost 进行简单压测
配置了下图的熔断规则

让请求休眠一段时间,接口方法如下:
@RestController
@RequestMapping("/order")
public class OrderController {
@GetMapping("/testRelated")public String testRelated() {try {TimeUnit.SECONDS.sleep(1); } catch (Exception e) {}return "hello";}
}
对接口http://localhost:8081/order/testRelated进行压测

浏览器访问时,已经熔断了

3. 热点规则
3.1 参数介绍

- 参数索引
对应的接口方法的传入的参数索引,Sentinel会对配置的相同参数的请求会进行流控
- 参数例外项
配置需要特殊管理的参数值
3.2 热点演示
通过热点规则,可以限制接口方法参数,实现一些热点数据的管理,比如秒杀活动时一个用户在30s内只能对该商品下一次单,但是VIP用户可以多次下单
接口 OrderController
@RestController
@RequestMapping("/order")
public class OrderController {@SentinelResource("testHotPointInfo")public String testHotPointInfo(int userID) {return "下单成功";}
}
userID为2的是VIP用户,无需流控,其他用户只能在30s内下一次单,如下图所配置

非VIP用户多次下单

VIP用户多次下单

4. @SentinelResource
通过@SentinelResource注解,可以帮助我们快速处理异常
4.1 常用参数说明
- **value:**定义资源名
- blockHandlerClass:指定资源如果被Sentinel限流了,抛出的自定义兜底方法所在的类
- blockHandler:指定资源如果被Sentinel限流了,抛出的自定义兜底方法(该自定义方法要求是静态的,该方法的返回参数与原方法的返回参数相同,方法参数需要有BlockException)
- fallbackClass:指定资源如果出现了错误,抛出的自定义兜底方法
- fallback:指定资源如果出现了错误了,抛出的自定义兜底方法(该自定义方法要求是静态的,该方法的返回参数与原方法的返回参数相同)
4.2 测试异常处理兜底返回
定义异常处理类 OrderBlockHandler,关键是方法要静态
public class OrderBlockHandler {//限流兜底抛出public static String blockFallback(BlockException ex) {return "我被限流了,直接失败";}//异常兜底抛出public static String ExceptionFallback() {return "我出错了,直接失败"}
}
定义接口类 OrderController
@RestController
@RequestMapping("/order")
public class OrderController {@GetMapping("/testHotPointInfo")@SentinelResource(value = "testHotPointInfo", blockHandlerClass = OrderBlockHandler.class, blockHandler = "blockFallback")public String testHotPointInfo() {return "123";}
}
结合上面提到的流控(这里就不再记录配置了),访问http://localhost:8081/order/testHotPointInfo

在接口里加上
int i = 1 / 0;
访问报错

5. Sentinel异常处理机制
尚硅谷新版SpringCloud上有一张很好的图,有空再补充
相关文章:
Spring Cloud Alibaba学习 3- Sentinel入门使用
Spring Cloud Alibaba学习 3- Sentinel入门使用 中文文档参考:Sentinel中文文档 一. SpringCloud整合Sentinel 1.1 下载Sentinel-Dashboard Sentinel下载地址:Sentinel-Dashboard 到下载目录,cmd输入 java -jar sentinel-dashboard-1.8…...
使用DeepSeek/chatgpt等AI工具辅助网络协议流量数据包分析
随着deepseek,chatgpt等大模型的能力越来越强大,本文将介绍一下deepseek等LLM在分数流量数据包这方面的能力。为需要借助LLM等大模型辅助分析流量数据包的同学提供参考,也了解一下目前是否有必要继续学习wireshark工具以及复杂的协议知识。 pcap格式 目…...
C语言 --- 经典习题1
C语言 --- 经典习题1 第 一 题 - - - 交 换 两 个 整 数 的 值(四 种 方 法)第 二 题 - - - 最 大 公 约 数 和 最 小 公 倍 数 之 和总结 💻作者简介:曾 与 你 一 样 迷 茫,现 以 经 验 助 你 入 门 C 语 言 …...
自定义mybatis拦截器,在springboot项目中不起作用的解决方法
自定义mybatis拦截器,在springboot项目中不起作用的解决方法 自定义mybatis拦截器,在若依springboot项目中不起作用的原因 找到 MyBatisConfig 配置类,引入自定义配置 在sqlSessionFactory中添加自定义拦截器,就可以正常使用了…...
记一次pytorch训练loss异常的问题
记一次pytorch训练loss异常的问题 问题描述 使用mmdetection框架训练时,某项loss出现异常大的值,比如1781232349724294.000。这个问题只在多卡训练时才会出现。 解决方法 在确认target和predction没有问题后,发现是在dataset中的数据处理…...
vue2使用d3.js实现网络拓扑图
vue2使用d3.js实现网络拓扑图 支持节点更换图标, 线条改变颜色 安装 npm i d37.9.0 --save自定义组件 <template><div style"width: 100%; height: 100%"><div ref"networkChart" class"network-chart"></div><e…...
记录一下在k3s快速创建gitlab
废话不多说,直接上配置文件 需要修改的地方(备注都有写): 1.命名空间 namespace 2. claimName 文件挂载 Deployment kind: Deployment apiVersion: apps/v1 metadata:name: gitlabnamespace: cicd # 替换为您的命名空间la…...
AWQ和GPTQ量化的区别
一、前言 本地化部署deepseek时发现,如果是量化版的deepseek,会节约很多的内容,然后一般有两种量化技术,那么这两种量化技术有什么区别呢? 二、量化技术对比 在模型量化领域,AWQ 和 GPTQ 是两种不同的量…...
线性模型 - 支持向量机
支持向量机(SVM)是一种用于分类(和回归)的监督学习算法,其主要目标是找到一个最佳决策超平面,将数据点分为不同的类别,并且使得分类边界与最近的数据点之间的间隔(margin)…...
AI大模型-提示工程学习笔记20-多模态思维链提示
目录 1. 多模态思维链提示的核心思想 (1) 单模态 CoT 的局限性 (2) Multimodal CoT 的解决方案 2. Multimodal CoT 的工作流程 (1) 多模态输入 (2) 特征提取 (3) 多模态融合 (4) 思维链生成 (5) 答案生成 3. Multimodal CoT 的关键组件 (1) 大语言模型 (LLM) (2) 多…...
nginx 搭建 IPv6 -> IPv4 反向代理服务器
背景 在实际生产过程中,由于各种原因,我们的在线服务搭建在火山云服务器上,使用火山云包括 ECS、CLB、PLB 等组件进行网络通信,并且通过专线接受来自某公司内部流量。但是在大概 22~23 年,某公司要把所有网络流量变为…...
湖北中医药大学谱度众合(武汉)生命科技有限公司研究生工作站揭牌
2025年2月11日,湖北中医药大学&谱度众合(武汉)生命科技有限公司研究生工作站揭牌仪式在武汉生物技术研究院一楼101会议室举行,湖北中医药大学研究生院院长刘娅教授、基础医学院院长孔明望教授、基础医学院赵敏教授、基础医学院…...
面试基础---深入解析 AQS
深入解析 AQS:从源码到实践,剖析 ReentrantLock 和 Semaphore 的实现 引言 在 Java 并发编程中,AbstractQueuedSynchronizer(AQS)是一个核心框架,它为构建锁和其他同步器提供了基础支持。ReentrantLock 和…...
go 语言中的线程池
使用 goroutine 和 channel Go 语言中并没有直接类似 Java 线程池的内建概念,但它提供了类似的功能,主要通过goroutine和channel来实现并发处理。你可以通过结合这两者来实现一个“线程池”的功能。 在 Go 中,goroutine是轻量级的线程&…...
从 0 到 1,用 Python 构建超实用 Web 实时聊天应用
从 0 到 1,用 Python 构建超实用 Web 实时聊天应用 本文深入剖析如何运用 Python 的 Flask 框架与 SocketIO 扩展,搭建一个功能完备的 Web 实时聊天应用。从环境搭建、前后端代码实现,到最终运行展示,逐步拆解关键步骤࿰…...
AF3 DataPipeline类process_multiseq_fasta 方法解读
AlphaFold3 data_pipeline 模块DataPipeline类的 process_multiseq_fasta 方法用于处理多序列 FASTA 文件,生成 AlphaFold3 结构预测所需的特征,适用于多链复合物的预测。它结合了 Minkyung Baek 在 Twitter 上提出的“AlphaFold-Gap”策略,即通过在多链 MSA 中插入固定长度…...
Vue2+Element实现Excel文件上传下载预览【超详细图解】
目录 一、需求背景 二、落地实现 1.文件上传 图片示例 HTML代码 业务代码 2.文件下载 图片示例 方式一:代码 方式二:代码 3.文件预览 图片示例 方式一:代码 方式二:代码 一、需求背景 在一个愉快的年后ÿ…...
[记录贴] 火绒奇怪的进程保护
最近一次更新火绒6.0到最新版,发现processhacker的结束进程功能无法杀掉火绒的进程,弹窗提示如下: 可能是打开进程时做了权限过滤,火绒注册了两个回调函数如下: 但奇怪的是,在另外一台机器上面更新到最新版…...
【蓝桥杯】每天一题,理解逻辑(1/90)【Leetcode 移动零】
文章目录 题目解析讲解算法原理【双指针算法思路】(数组下标充当指针)如何划分和执行过程大致 代码详情 题目解析 题目链接:https://leetcode.cn/problems/move-zeroes/description/ 题目意思解析 把所有的零移动到数组的末尾保持非零元素的相对顺序 理解了这两层…...
vue js-web-screen-shot浏览器截取其他非全屏窗口界面
网页截屏 js-web-screen-shot 截取其他窗口 显示不全问题 npm 安装 js-web-screen-shot npm install js-web-screen-shot --savejs-web-screen-shot默认截屏是从左下角开始的,修改成左上角开始,然后编辑cropBoxInfo参数宽高进行截取,目前截…...
pycharm远程连接服务器运行pytorch
Linux部署pytorch 背景介绍 不同的开源代码可能需要不同的实验环境和版本,这时候的确体现出Anaconda管理环境的好处了,分别搞一个独立环境方便管理。 有的教程建议选择较旧的版本,但笔者建议在条件允许的情况下安装最新版,本次…...
服务器虚拟化是一种将物理服务器资源(如CPU、内存、存储、网络等)通过软件技术抽象、分割和整合,创建多个独立、隔离的虚拟服务器(虚拟机,VM)的技术。
服务器虚拟化是一种将物理服务器资源(如CPU、内存、存储、网络等)通过软件技术抽象、分割和整合,创建多个独立、隔离的虚拟服务器(虚拟机,VM)的技术。每个虚拟机可以运行不同的操作系统和应用程序,如同独立的物理服务器一样工作。 核心思想 资源池化:将物理服务器的硬…...
java练习(41)
ps:题目来自力扣 最接近的三数之和 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 import java.util.Arrays;class Solut…...
关于CanvasRenderer.SyncTransform触发调用的机制
1)关于CanvasRenderer.SyncTransform触发调用的机制 2)小游戏Spine裁剪掉帧问题 3)Dedicated Server性能问题 4).mp4视频放入RT进行渲染的性能分析闭坑指南 这是第421篇UWA技术知识分享的推送,精选了UWA社区的热门话题…...
【计算机网络】OSI模型、TCP/IP模型、路由器、集线器、交换机
一、计算机网络分层结构 计算机网络分层结构 指将计算机网络的功能划分为多个层次,每个层次都有其特定的功能和协议,并且层次之间通过接口进行通信。 分层设计的优势: 模块化:各层独立发展(如IPv4→IPv6,…...
PDF扫描档智能方向识别:多模型投票机制的实践测试 救活古典书籍
2025-02-22 20:10物联全栈123 尊敬的诸位!我是一名物联网工程师。关注我,持续分享最新物联网与AI资讯和开发实战。期望与您携手探寻物联网与 AI 的无尽可能 RAG知识库搭建的过程中,扫描档pdf的支持和准确率一直是个大家都不愿主动提起的事情…...
java23种设计模式-桥接模式
桥接模式(Bridge Pattern)学习笔记 🌟 定义 桥接模式属于结构型设计模式,将抽象部分与实现部分分离,使它们可以独立变化。通过组合代替继承的方式,解决多维度的扩展问题,防止类爆炸。 &#x…...
【11】RUST使用cargo组织crate
文章目录 使用cargo组织crate重导出编译文档生成测试 cargo组织工作空间 TODOcrate.io账号 TODO暂时不看发布crate 使用cargo组织crate 重导出 在模块顶部使用pub use self::重导出,方便使用模块时候直接使用use mod_X::xxx。从而隐藏crate内部模块的结构。方便向…...
springboot 引入前端
前端 打包 npm run build vue.config.js 文件 publicPath 默认建议保持 / publicPath: ‘/’ 后端 目录 粘贴下面目录之一: src/main/resources/static/ src/main/resources/public/ 补充(用的少) server:servlet:context-path: /thirdAdm…...
ubuntu20.04 使用nmcli 连接wifi,并且设置永久连接
在 Ubuntu 20.04 中,你可以使用 nmcli 命令行工具来连接 WiFi 并设置为永久连接。以下是具体步骤: 1. 查看可用的 WiFi 网络 首先,使用以下命令查看可用的 WiFi 网络: nmcli dev wifi 这将列出所有可用的 WiFi 网络及其 SSID。…...
