服务流控(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遇到人形机器人
为什么人类对人形机器人抱有执念 人形机器人是一种模仿人类外形和行为的机器人,它的研究和开发有着多方面的目的和意义。 人形机器人可以更好地适应人类的环境和工具。人类的生活和工作空间都是根据人的尺寸和动作来设计的,例如门、楼梯、桌椅、开关等…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
