Spring Cloud 整合Sentinel
1、引入依赖
版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub


父pom
<spring.cloud.version>Hoxton.SR12</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.10-RC1</spring.cloud.alibaba.version>
Sentinel应用直接引用starter
<dependency>    <groupId>com.alibaba.cloud</groupId>    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2、配置规则
限流着重于防止整体系统的入口流量过大,通过量化控制进入系统的请求速度。
降级是在系统负载过高或部分服务不可用时,采取的一种策略,它允许系统牺牲部分非核心功能或降低服务质量,以保证核心功能的正常运行。
    // 限流配置规则@PostConstructpublic static void initFlowRules() {List<FlowRule> rules = new ArrayList<>();FlowRule rule = new FlowRule();rule.setResource("ordering"); //设置资源名称rule.setGrade(RuleConstant.FLOW_GRADE_QPS);//QPS 每秒的访问量// Set limit QPS to 20.rule.setCount(2);rules.add(rule);FlowRuleManager.loadRules(rules);}// 降级规则//@PostConstructpublic  void initFlowRules2() {List<DegradeRule> rules = new ArrayList<>();DegradeRule rule = new DegradeRule();rule.setResource("ordering2"); //设置资源名称rule.setGrade(DEGRADE_GRADE_EXCEPTION_RATIO);// Set limit QPS to 20.rule.setCount(0.5);rule.setMinRequestAmount(10);rule.setTimeWindow(10); // 10s 熔断时长10srule.setStatIntervalMs(10*1000); 10s 统计时长,统计的窗口(单位为 ms)rules.add(rule);DegradeRuleManager.loadRules(rules);}
3、为接口设置熔断与降级方法
3.1 blockHandler与fallback命名规则
-  blockHandler方法应该接收与原始方法相同类型的参数,并且额外添加一个 BlockException类型的参数,用于传递被 Sentinel 阻塞的具体原因。
命名规则是:
1:原方法名 + "_blockHandler",比如在示例中,对应的 blockHandler 方法应该是
ordering_blockHandler(Integer id, BlockException ex)。2:必须为static方法
-  fallback方法应该接收与原始方法相同类型的参数 
命名规则是:
1:原方法名 + "_fallback",此方法应该接收与原始方法相同的参数列表,并返回与原始方法相同的返回类型。
2:必须为static方法
在示例中,对应的 fallback 方法应该是
ordering_fallback(Integer id)也可以ordering_fallback(Integer id, Throwable ex)
上述的 _blockHandler 和 _fallback 后面是可以带上任意的参数类型,但至少需要包含原始方法的所有参数类型,以及在 blockHandler 方法中加入 BlockException 参数。
3.2 触发条件
-  blockHandler: -  触发条件:当资源访问由于触发了 Sentinel 的流控(QPS 超过阈值等情况)规则而被阻止时,会触发 blockHandler指定的方法。该方法主要用于处理因流量控制而导致的阻塞情况。
-  示例中 blockHandler="ordering_blockHandler"表示如果ordering方法因为 Sentinel 流控规则而被阻止时,将调用OrderController类中的ordering_blockHandler方法进行处理。
 
-  
-  fallback: -  触发条件:通常在服务不稳定或者异常抛出时触发。对于 Sentinel 来说,若开启了熔断(如因多次调用超时或异常),则会触发熔断进入半开状态,后续请求会直接进入 fallback 处理逻辑,或者在某些资源执行过程中发生了异常也会触发 fallback。 
-  示例中 fallback="ordering_fallback"表示如果ordering方法出现异常或者满足 Sentinel 熔断策略时,将调用OrderController类中的ordering_fallback方法进行回退处理。
-  在熔断期间,不再调用原始方法,而是直接调用降级方法 
 
-  
3.3验证限流
@RestController
@RequestMapping("/api/order")
@Slf4j
public class OrderController {private  static AtomicInteger count = new AtomicInteger(0);@GetMapping@SentinelResource(value = "HelloWorld",blockHandlerClass=OrderController.class,blockHandler = "ordering_blockHandler")public String ordering(Integer id) {int i = count.incrementAndGet();log.debug(id + "进来了 - > "+i);return "下单成功";}public static String  ordering_blockHandler(Integer id,BlockException ex){int i = count.incrementAndGet();log.debug("熔断了 -> "+i );return "系统繁忙,请稍后重试";}@PostConstruct //初始化执行private  void initFlowRules(){List<FlowRule> rules = new ArrayList<>();FlowRule rule = new FlowRule();rule.setResource("HelloWorld");rule.setGrade(RuleConstant.FLOW_GRADE_QPS);// Set limit QPS to 20.rule.setCount(2);rules.add(rule);FlowRuleManager.loadRules(rules);}
}3.4 验证降级
@RestController
@RequestMapping("/api/order2")
@Slf4j
public class Order2Controller {@GetMapping@SentinelResource(value = "ordering2",fallbackClass= Order2Controller.class,fallback = "ordering_fallback")public String ordering(Integer id) {log.debug("进来了");if (id == 4) {throw new IllegalArgumentException("参数异常");}return "下单成功";}//? 什么时候触发? ordering_fallback 有什么要求吗?public static String ordering_fallback(Integer id, Throwable ex) {log.debug("降级");return "降级了";}@PostConstruct //初始化执行 降级规则private  void initDegradeRule(){List<DegradeRule> rules = new ArrayList<>();DegradeRule rule = new DegradeRule("ordering2").setGrade(CircuitBreakerStrategy.ERROR_COUNT.getType())// Max allowed response time 错误数量.setCount(2)// Retry timeout (in second) 熔断10s.setTimeWindow(20).setMinRequestAmount(10) //最小请求数.setStatIntervalMs(10*1000);//10s 统计时长,统计的窗口(单位为 ms)rules.add(rule);DegradeRuleManager.loadRules(rules);}
}4、验证接口

5、高级配置
5.1流量控制规则 (FlowRule)

5.2 熔断降级规则 (DegradeRule)

5.3 系统保护规则 (SystemRule)
Sentinel 系统自适应限流从整体维度对应用入口流量进行控制,结合应用的 Load、CPU 使用率、总体平均 RT、入口 QPS 和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。

private void initSystemProtectionRule() {List<SystemRule> rules = new ArrayList<>();SystemRule rule = new SystemRule();rule.setHighestSystemLoad(10);rules.add(rule);SystemRuleManager.loadRules(rules);
}
5.4 访问控制规则 (AuthorityRule)
很多时候,我们需要根据调用方来限制资源是否通过,这时候可以使用 Sentinel 的访问控制(黑白名单)的功能。黑白名单根据资源的请求来源(origin)限制资源是否通过,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。授权规则,即黑白名单规则(AuthorityRule)非常简单,主要有以下配置项:
-  resource:资源名,即限流规则的作用对象
-  limitApp:对应的黑名单/白名单,不同 origin 用 ,分隔,如appA,appB
-  strategy:限制模式,AUTHORITY_WHITE为白名单模式,AUTHORITY_BLACK为黑名单模式,默认为白名单模式
5.5热点规则 (ParamFlowRule)

parameter-flow-control | Sentinel
相关文章:
 
Spring Cloud 整合Sentinel
1、引入依赖 版本说明 alibaba/spring-cloud-alibaba Wiki GitHub 父pom <spring.cloud.version>Hoxton.SR12</spring.cloud.version> <spring.cloud.alibaba.version>2.2.10-RC1</spring.cloud.alibaba.version>Sentinel应用直接引用starter <…...
 
Java入门基础学习笔记4——开发Helloworld入门程序
Java程序开发的三个步骤: 1)编写代码 2)编译代码 3)运行代码 注意事项: 第一个java程序建议使用记事本来编写。 建议代码文件名全英文、首字母大写、满足驼峰模式,源代码文件的后缀必须是.java 注意&a…...
了解WebSocket
1.概念: WebSocket是一种在单个TCP连接上进行全双工通信的协议,属于应用层协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握…...
 
从开发角度理解漏洞成因(02)
文章目录 文件上传类需求文件上传漏洞 文件下载类需求文件下载漏洞 扩展 留言板类(XSS漏洞)需求XSS漏洞 登录类需求cookie伪造漏洞万能密码登录 持续更新中… 文章中代码资源已上传资源,如需要打包好的请点击PHP开发漏洞环境(SQL注…...
 
Web实时通信的学习之旅:轮询、WebSocket、SSE的区别以及优缺点
文章目录 一、通信机制1、轮询1.1、短轮询1.2、长轮询 2、Websocket3、Server-Sent Events 二、区别1、连接方式2、协议3、兼容性4、安全性5、优缺点5.1、WebSocket 的优点:5.2、WebSocket 的缺点:5.3、SSE 的优点:5.4、SSE 的缺点࿱…...
 
TMS320F280049 CLB模块--LUT4 OUTLUT(4)
LUT4 示意图如下: OUTLUT 示意图如下: 寄存器 参考文档: TMS320F28004x Real-Time Microcontrollers Technical Reference Manual (Rev. G)...
 
功能测试_分类_用例_方法
总结 测试分类 按阶段分类 是否查看源代码分类 是否运行分类 是否自动化 其他分类 软件质量模型 开发模型-瀑布模型 测试过程模型 v w 测试用例八大要素 用例编号 用例标题 …...
 
[沫忘录]MySQL 锁
[沫忘录]MySQL 锁 锁能够协调多线程或多进程并发访问某资源产生的数据冲突与错乱。而在数据库中,锁也是协调数据库访问的有效工具。 全局锁 能够锁住当前服务器所有数据库及其表。后续所有事务都只能进行读操作,而不能进行写操作或表属性更改。 典型…...
 
噪声嵌入提升语言模型微调性能
在自然语言处理(NLP)的快速发展中,大模型(LLMs)的微调技术一直是研究的热点。最近,一篇名为《NEFTUNE: NOISY EMBEDDINGS IMPROVE INSTRUCTION FINETUNING》的论文提出了一种新颖的方法,通过在训…...
XML文档基本语法
XML文档基本语法包括以下几个知识点: 开始标记(Start Tag):开始标记是XML元素的起始符号,由左尖括号(<)和元素名称组成。例如,是一个开始标记,表示一个名为"book…...
git开发工作流程
git开发工作流程 (1)先将远程代码pull到本地 (2)在本地上分支上进行开发 (3)开发完之后,push到远程分支 (4)由远程的master进行所有分支合并...
JDK生成https配置
keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\https证书\weChat.keystore -validity 36500 -keypass 250250 keytool -importkeystore -srcstoretype JKS -srckeystore D:\https证书\weChat.keystore -srcstorepass 250250 -srcalias tomcat -srckeypass 25025…...
 
通过 Java 操作 redis -- set 集合基本命令
目录 使用命令 sadd ,smembers 使用命令 sismember 使用命令 scard 使用命令 spop 使用命令 sinter,sinterstore,sunion,sunionstore,sdiff,sdiffstore 关于 redis set 集合类型的相关命令推荐看Redis …...
 
WebSocket前后端建立以及使用
1、什么是WebSocket WebSocket 是一种在 Web 应用程序中实现双向通信的协议。它提供了一种持久化的连接,允许服务器主动向客户端推送数据,同时也允许客户端向服务器发送数据,实现了实时的双向通信。 这部分直接说你可能听不懂;我…...
 
C++数据结构之链表树图的存储
本文主要介绍用数组存储,结构只做简单介绍 目录 文章目录 前言 结构体实现 1、链表的存储 2、树的存储 3、图的存储 数组实现 1、链表实现 2、树和图的实现 总结 前言 在正常工程中,我们通常使用结构体或者类,来定义并使用如链表…...
 
又一位互联网大佬转行当网红,能写进简历么?
最近半个月,有两个中年男人仿佛住进了热搜。 一个是刚刚辟谣自己“卡里没有冰冷的 40 亿”的雷军,另一个则是在今年年初就高呼“如果有可能,企业家都要去当网红”的 360 创始人周鸿祎。 他也确实做到了。 先是作为当年 3Q 大战的当事人&…...
Codeforces Round 134 (Div. 1) A. Ice Skating (并查集)
Ice Skating 题面翻译 Description 给出n个点的横纵坐标,两个点互通当且仅当两个点有相同的横坐标或纵坐标,问最少需要加几个点才能使得所有点都两两互通 Input 第一行一个整数n表示点数,之后n行每行两个整数x[ i ]和y[ i ]表示第i个点的…...
 
深入了解 Flask Request
文章目录 获取请求数据获取请求信息文件上传总结 Flask 是一个轻量级的 Python Web 框架,其简洁的设计和灵活的扩展性使其成为了许多开发者的首选。在 Flask 中,处理 HTTP 请求是至关重要的,而 Flask 提供了丰富而强大的 request 对象来处理…...
前端测试策略与实践:单元测试、E2E测试与可访问性审计
前端测试策略是确保Web应用程序质量、性能和用户体验的关键组成部分。有效的测试策略通常包括单元测试、端到端(E2E)测试以及可访问性审计等多个层面。以下是关于这三类测试的策略与实践建议: 单元测试 定义与目的: 单元测试是针…...
 
修改el-checkbox样式
一定要在最外层; //未选中框/deep/ .el-checkbox__inner{border-color: #0862a3;}//选中框/deep/ .el-checkbox__input.is-checked .el-checkbox__inner{background-color: #0862a3;border-color: #0862a3;}//未选中框时右侧文字/deep/ .el-checkbox__label{}//选中…...
 
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
 
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
 
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
 
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
 
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
 
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
