服务流控(Sentinel)
引入依赖
<!-- 必须的 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><!-- sentinel 核心库 -->
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>1.8.0</version>
</dependency>
实现流控
编码实现
- 限流实现
private static final Logger logger = LoggerFactory.getLogger(HelloController.class);private static final String RESOURCE_NAME = "hello";@RequestMapping("/hello")public String hello() {Entry entry = null;// 务必保证finally会被执行try {// 资源名可使用任意有业务语义的字符串entry = SphU.entry(RESOURCE_NAME);// 被保护的业务逻辑// do something...String str = "hello world";logger.info("++++++++++++" + str);return str;} catch (BlockException e1) {// 资源访问阻止,被限流或被降级// 进行相应的处理操作logger.info("block!!!!!");return "被流控了!!!!";} catch (Exception e) {// 若需要配置降级规则。则需要通过这种方式记录业务异常Tracer.traceEntry(e, entry);} finally {if (entry != null) {entry.exit();}}return null;}
- 注册流控规则
@PostConstructprivate static void initFlowControlRules() { // 通常设置在服务提供方// 流控规则列表List<FlowRule> flowRuleList = new ArrayList<>();// 流控规则FlowRule helloFlowRule = new FlowRule();// 设置流控的资源名称helloFlowRule.setResource(RESOURCE_NAME);// 设置流控规则 QPShelloFlowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);// 设置流控的阈值// Set limit QPS to 20helloFlowRule.setCount(1);flowRuleList.add(helloFlowRule);FlowRuleManager.loadRules(flowRuleList);}
- 效果呈现

注解实现
- 引入依赖
<!-- @SentinelResource -->
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-annotation-aspectj</artifactId><version>1.8.0</version>
</dependency>
- 增加切面
- 启动类
@Beanpublic SentinelResourceAspect sentinelResourceAspect() {return new SentinelResourceAspect();}
-
- 配置类
/*** 1. 使用注解@SentinelResource* 2. 使用了 Spring AOP* 3. 通过配置的方式将 SentinelResourceAspect 注册为一个 Spring Bean*/
@Configuration
public class AopConfiguration {@Beanpublic SentinelResourceAspect sentinelResourceAspect() {return new SentinelResourceAspect();}
}
- 注解使用
/*** 使用注解 使用Sentinel** @SentinelResource: 依赖:* <dependency>* <groupId>com.alibaba.csp</groupId>* <artifactId>sentinel-annotation-aspectj</artifactId>* <version>1.8.0</version>* </dependency>* 1. value: 资源名称* 2. blockHandler 流控降低处理器 (默认和接口实现方法在同一个类中)* 3. blockHandlerClass 指定处理器类* 4. fallback 业务异常处理* 5. fallbackClass 指定异常处理器类* 6. blockHandler 和 fallback 同时配置, blockHandler 优先级高* 7. exceptionsToIgnore 排除不需要处理的异常 -> exceptionsToIgnore = {}*/@RequestMapping("/user")@SentinelResource(value = USER_RESOURCE_NAME, blockHandler = "blockHandlerForGetUser",
// fallback = "fallBackForGetUser",exceptionsToIgnore = {})public User getUser(String id) {// int i = 1 / 0;return new User(id, "Quentin");}/*** 注意:* 1. 必须是public, 若放在其他类中 blockHandlerClass 则必须为 public static* 2. 返回值 需和原接口方法的返回值保持一致 且 参数包含原方法的参数* 3. 额外增加 异常参数 BlockException** @param id* @param be* @return*/public User blockHandlerForGetUser(String id, BlockException be) {logger.info("++++++++注解流控");return new User(id, "被流控了!!!");}
- 增加流控规则
@PostConstructprivate static void initFlowControlRules() { // 通常设置在服务提供方// 流控规则列表List<FlowRule> flowRuleList = new ArrayList<>();// 流控规则FlowRule userFlowRule = new FlowRule();// 设置流控的资源名称userFlowRule.setResource(USER_RESOURCE_NAME);// 设置流控规则 QPSuserFlowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);// 设置流控的阈值// Set limit QPS to 20userFlowRule.setCount(1);flowRuleList.add(userFlowRule);FlowRuleManager.loadRules(flowRuleList);}
- 效果

相关文章:
服务流控(Sentinel)
引入依赖 <!-- 必须的 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency><!-- sentinel 核心库 --> <dependency><groupId>com.ali…...
点亮代码之灯,程序员的夜与电脑
在科技的海洋里,程序员是那些驾驶着代码船只,穿梭于虚拟世界的探险家。他们手中的键盘是航行的舵,而那台始终不愿关闭的电脑,便是他们眼中永不熄灭的灯塔。有人说,程序员不喜欢关电脑,这究竟是为什么呢&…...
ClickHouse--07--Integration 系列表引擎
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Integration 系列表引擎1 HDFS1.1 语法1.2 示例: 2 MySQL2.1 语法2.2 示例: 3 Kafka3.1 语法3.2 示例:3.3 数据持久化方法 Integ…...
前端架构: 脚手架框架之yargs的11种基础核心特性的应用教程
脚手架框架之yargs的基础核心特性与应用 1 )概述 yargs 是脚手架当中使用量非常大的一个框架进入它的npm官网: https://www.npmjs.com/package/yargs 目前版本: 17.7.2Weekly Downloads: 71,574,188 (动态数据)最近更新:last month (github)说明这是一个…...
MySQL性能调优篇(6)-主从复制的配置与管理
MySQL数据库主从复制是一种常用的数据复制和高可用性解决方案。它允许将一个MySQL主服务器上的数据自动复制到多个从服务器上,从而提供了数据冗余备份、读写分离等优势。本文将详细介绍MySQL数据库主从复制的配置与管理。 1. 原理概述 MySQL主从复制是基于二进制日…...
Linux第49步_移植ST公司的linux内核第1步_获取linux源码
已知ST公司的linux源码路径: /home/zgq/linux/atk-mp1/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.4.31-r0 1、创建“my_linux”目录 打开第1个终端 输入“ls回车” 输入“cd linux/回车”,切换…...
怎样学习Windows下命令行编写
第一:Windows下命令行指的是cmd和powershell命令行编写 第二:必须要用好help或/?命令,这个命令是最基本的也是最常用的命令列表和语法查看命令 第三:cmd命令使用help查看命令列表或“一串带参数的命令 /?"(不…...
数据结构第十六天(二叉树层序遍历/广度优先搜索(BFS)/队列使用)
目录 前言 概述 接口 源码 测试函数 运行结果 往期精彩内容 前言 从前的日色变得慢,车,马,邮件都慢,一生,只够爱一个人。 概述 二叉树的层序遍历可以使用广度优先搜索(BFS)来实现。具体步骤如下&…...
6.s081 学习实验记录(八)Networking
文章目录 network driver network driver //TODO...
图解贝塞尔曲线生成原理
贝塞尔曲线是一种在计算机图形学中广泛使用的参数曲线,主要用于二维图形应用程序中。它是由法国工程师皮埃尔贝塞尔在1962年提出的,主要用于汽车车身设计。贝塞尔曲线的主要特点是,只要确定了控制点,就可以生成一条平滑的曲线。 …...
租房招聘|在线租房和招聘平台|基于Springboot的在线租房和招聘平台设计与实现(源码+数据库+文档)
在线租房和招聘平台目录 目录 基于Springboot的在线租房和招聘平台设计与实现 一、前言 二、系统功能设计 三、系统实现 1、房屋管理 2、招聘管理 3、平台资讯管理 4、平台资讯类型管理 四、数据库设计 1、实体ER图 六、论文参考 七、最新计算机毕设选题推荐 八、源…...
简单试验:用Excel进行爬虫
文章目录 Excel的版本具体操作实例从网站上爬取工商银行的汇率Excel的版本 office 2016,2019,365这几个版本都可以 具体操作 #mermaid-svg-NlIVMivGoJbdyWW0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NlIVMi…...
SQL 精讲-MySql 常用函数,MySQL语句精讲和举例
FORMAT(数值,保留位数) 四舍五入 SELECT *,FORMAT(score/3,2) from studentROUND(数值,保留位数) 四舍五入 SELECT ROUND(score/3,2) from studentCONCAT(字符串 1,字符串 2) 字符串拼接 SELECT CONCAT(customer_name, (,address,)) from mt_customerLEFT(字符串,长度) 截取…...
nlp中如何数据增强
在自然语言处理(NLP)中,数据增强是一种常用的技术,旨在通过对原始文本进行一系列变换和扩充,生成更多多样化的训练数据。这有助于提高模型的泛化能力和鲁棒性。下面是一些常见的数据增强方法在NLP中的应用:…...
python:xml.etree,用 xmltodict 转换为json数据,生成jstree所需的文件
请参阅:java : pdfbox 读取 PDF文件内书签 或者 python:从PDF中提取目录 请注意:书的目录.txt 编码:UTF-8,推荐用 Notepad 转换编码。 xml 是 python 标准库,在 D:\Python39\Lib\xml\etree pip install …...
C#log4net日志保存到Sqlserver数据库表(16)
要将log4net的日志保存到SQL Server数据库表中,你需要配置log4net使用一个数据库追加器(appender),通常是AdoNetAppender。以下是一个示例配置,展示如何将log4net的日志输出配置为写入SQL Server数据库表。 首先&…...
SpringCloud-Nacos集群搭建
本文详细介绍了如何在SpringCloud环境中搭建Nacos集群,为读者提供了一份清晰而详尽的指南。通过逐步演示每个关键步骤,包括安装、配置以及Nginx的负载均衡设置,读者能够轻松理解并操作整个搭建过程。 一、Nacos集群示意图 Nacos࿰…...
第十五届蓝桥杯全国软件和信息技术专业人才大赛个人赛(软件赛)软件测试组竞赛规则及说明
第十五届蓝桥杯全国软件和信息技术专业人才大赛个人赛 (软件赛)软件测试组竞赛规则及说明 目录...
【算法与数据结构】496、503、LeetCode下一个更大元素I II
文章目录 一、496、下一个更大元素 I二、503、下一个更大元素II三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、496、下一个更大元素 I 思路分析:本题思路和【算法与数据结构】739、LeetCode每日温度类似…...
当AGI遇到人形机器人
为什么人类对人形机器人抱有执念 人形机器人是一种模仿人类外形和行为的机器人,它的研究和开发有着多方面的目的和意义。 人形机器人可以更好地适应人类的环境和工具。人类的生活和工作空间都是根据人的尺寸和动作来设计的,例如门、楼梯、桌椅、开关等…...
宝塔面板新手避坑指南:从服务器选购到LNMP环境一键部署全流程
宝塔面板新手避坑指南:从服务器选购到LNMP环境一键部署全流程 第一次接触服务器运维的新手,往往会被各种专业术语和复杂操作搞得晕头转向。作为过来人,我深知那种面对命令行时的无助感。宝塔面板的出现,确实让服务器管理变得简单了…...
Cardano节点高级功能探索:质押池、智能合约与治理的终极指南
Cardano节点高级功能探索:质押池、智能合约与治理的终极指南 【免费下载链接】cardano-node The core component that is used to participate in a Cardano decentralised blockchain. 项目地址: https://gitcode.com/gh_mirrors/ca/cardano-node Cardano节…...
SecGPT-14B赋能教育行业:高校网络安全实验室AI教学平台搭建
SecGPT-14B赋能教育行业:高校网络安全实验室AI教学平台搭建 1. 引言:当网络安全教学遇上AI大模型 想象一下,在高校的网络安全实验室里,学生面对一个复杂的漏洞分析报告,不再需要花费数小时翻阅厚重的教材和零散的在线…...
Changedetection.io网页监控工具:免费开源网站变更检测终极指南
Changedetection.io网页监控工具:免费开源网站变更检测终极指南 【免费下载链接】changedetection.io The best and simplest free open source website change detection, website watcher, restock monitor and notification service. Restock Monitor, change de…...
遥感图像小目标检测实战:手把手教你用FFCA-YOLO复现TGRS 2024论文实验(附代码与环境配置)
遥感图像小目标检测实战:FFCA-YOLO从环境配置到结果复现全流程解析 当面对遥感图像中那些仅占3232像素的微小目标时,传统检测方法往往力不从心。FFCA-YOLO作为TGRS 2024的最新研究成果,通过特征增强模块(FEM)、特征融合模块(FFM)和空间上下文…...
OpenClaw+nanobot日程管理:自然语言输入转日历事件
OpenClawnanobot日程管理:自然语言输入转日历事件 1. 为什么需要自然语言日程管理 作为一个经常被各种会议和截止日期追着跑的技术从业者,我一直在寻找更高效的日程管理方式。传统的日历应用需要手动填写时间、地点、标题等字段,操作繁琐且…...
无代码玩转OpenClaw:nanobot镜像图形化配置自动化流程
无代码玩转OpenClaw:nanobot镜像图形化配置自动化流程 1. 为什么选择图形化配置OpenClaw 作为一个长期与技术打交道的开发者,我最初接触OpenClaw时也被它的命令行配置方式劝退过。直到发现了nanobot这个超轻量级镜像,才真正体会到"无代…...
保姆级教程:用FLUX.2-Klein-9B在ComfyUI中快速编辑人像照片
保姆级教程:用FLUX.2-Klein-9B在ComfyUI中快速编辑人像照片 1. 准备工作与环境搭建 在开始使用FLUX.2-Klein-9B进行人像编辑前,我们需要先准备好运行环境。这个模型虽然功能强大,但部署过程其实非常简单,跟着步骤走就能快速上手…...
SUPER COLORIZER项目实战:使用LaTeX撰写技术报告与效果论文
SUPER COLORIZER项目实战:使用LaTeX撰写技术报告与效果论文 你是不是也遇到过这种情况?辛辛苦苦做完了SUPER COLORIZER的实验,效果数据也整理好了,但一到写报告或论文的时候就头疼。用Word吧,格式调整起来太麻烦&…...
3大维度破解C盘空间困局:Windows Cleaner让系统重获新生的开源方案
3大维度破解C盘空间困局:Windows Cleaner让系统重获新生的开源方案 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 当你的电脑频繁弹出"磁盘空间…...
