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 熔断演示

这里只拿慢调用比例来演示,其他的也都差不多,要演示熔断,需要用到压测工具,apipostjmeter都是好用的压测工具,这里就直接用 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上有一张很好的图,有空再补充

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24842.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32——HAL库开发笔记23(定时器4—输入捕获)(参考来源:b站铁头山羊)

定时器有四个通道&#xff0c;这些通道既可以用来作为输入&#xff0c;又可以作为输出。做输入的时候&#xff0c;可以使用定时器对外部输入的信号的时间参数进行测量&#xff1b;做输出的时候&#xff0c;可以使用定时器向外输出精确定时的方波信号。 一、输入捕获 的基本原理…

Spring MVC框架六:Ajax技术

精心整理了最新的面试资料&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 简介 jQuery.ajax Ajax原理 结语 创作不易&#xff0c;希望能对大家给予帮助 想要获取更多资源? 点击链接获取

通过返回的key值匹配字典中的value值

需求 页面中上面搜索项有获取字典枚举接口&#xff0c;table表格中也有根据key匹配字典中的value 方案一 需要做到的要求 这里上面下拉列表是一个组件获取的字典&#xff0c;下面也是通过字典匹配&#xff0c;所以尽量统一封装一个函数&#xff0c;每个组件保证最少变动tabl…

Python游戏编程之赛车游戏6-2

3.2 move()方法的定义 Player类的move()方法用于玩家控制汽车左右移动&#xff0c;当玩家点击键盘上的左右按键时&#xff0c;汽车会相应地进行左右移动。 move()方法的代码如图7所示。 图7 move()方法的代码 其中&#xff0c;第20行代码通过pygame.key.get_pressed()函数获…

通俗易懂:RustDesk Server的搭建及使用

最近有很多远程桌面连接的需求&#xff0c;使用花生壳、topdesk等现有的远程控制又有数量上的限制&#xff0c;因此利用公司现有的具有固定IP地址的服务器&#xff0c;搭建了一台 RustDesk Server来解决工作中的痛点。 结论是丝毫不输哪些收费的软件&#xff0c;不论是剪切板、…

SQL注入练习

目录 一、如何绕过 information schema 字段过滤注入 二、如何绕过 order by 语句过滤注入 三、seacmsv9 实现报错注入数据 一、如何绕过 information schema 字段过滤注入 1、使用其他系统表&#xff0c;不同数据库有各自的系统表&#xff0c;可替代information_schema。 …

手机放兜里,支付宝“碰一下”被盗刷?

大家好&#xff0c;我是小悟。 近期&#xff0c;网络上关于“支付宝‘碰一下’支付易被盗刷”的传言甚嚣尘上&#xff0c;不少用户对此心生疑虑。 首先&#xff0c;要明确一点&#xff1a;“碰一下”支付并不会像某些传言中所描述的那样容易被隔空盗刷。这一观点已经得到了支付…

MySQL MHA 部署全攻略:从零搭建高可用数据库架构

文章目录 1.MHA介绍2.MHA组件介绍3.集群规划4.服务器初始化5.MySQL集群部署5.1 安装MySQL集群5.2 配置一主两从5.3 测试MySQL主从5.4 赋予MHA用户连接权限 6.安装MHA环境6.1 安装MHA Node6.2 安装MHA Manager 7.配置MHA环境8.MySQL MHA高可用集群测试8.1 通过VIP连接MySQL8.2模…

国标28181协议在智联视频超融合平台中的接入方法

一. 国标28181介绍 国标 28181 协议全称是《安全防范视频监控联网系统信息传输、交换、控制技术要求》&#xff0c;是国内视频行业最重要的国家标准&#xff0c;目前有三个版本&#xff1a; 2011 年&#xff1a;推出 GB/T 28181-2011 版本&#xff0c;为安防行业的前端设备、平…

ThinkPHP:配置Redis并使用

文章目录 一、环境说明二、php.ini中配置Redis扩展1、下载php_redis.dll文件2、安装Redis扩展3、修改php.ini4、重启wamp服务 三、thinkphp6项目中修改配置及使用 一、环境说明 我的是64位Windows10环境&#xff0c;安装了wamp环境集成工具&#xff0c;方便学习使用。 php版本…

[ComfyUI]官方已支持Skyreels混元图生视频,速度更快,效果更好(附工作流)

一、介绍 昨天有提到官方已经支持了Skyreels&#xff0c;皆大欢喜&#xff0c;效果更好一些&#xff0c;还有GGUF量化版本&#xff0c;进一步降低了大家的显存消耗。 今天就来分享一下官方流怎么搭建&#xff0c;我体验下来感觉更稳了一些&#xff0c;生成速度也更快&#xf…

ui设计公司兰亭妙微分享:科研单位UI界面设计

科研单位的UI界面设计是一项至关重要的任务&#xff0c;它不仅关乎科研工作的效率&#xff0c;还直接影响到科研人员的用户体验。以下是对科研单位UI界面设计的详细分析&#xff1a; 一、设计目标 科研单位的UI界面设计旨在提升科研工作的效率与便捷性&#xff0c;同时确保科…

纷析云:赋能企业财务数字化转型的开源解决方案

在企业数字化转型的浪潮中&#xff0c;财务管理的高效与安全成为关键。纷析云凭借其开源、安全、灵活的财务软件解决方案&#xff0c;为企业提供了一条理想的转型路径。 一、开源的力量&#xff1a;自主、安全、高效 纷析云的核心优势在于其100%开源的财务软件源码。这意味着…

Win11安装dpanel实现docker可视化面板,并解决端口冲突的问题

目标是给Win11的docker安装dpanel可视化面板&#xff0c;可以更直观的看到docker中的数据。 执行镜像&#xff08;没有则自动拉取&#xff09; 首先配置好docker加速环境&#xff08;阿里云的docker加速等&#xff09;&#xff0c;然后访问GitHub - donknap/dpanel: 轻量化 do…

Jmeter聚合报告导出log文档,Jmeter聚合报告导出到CSV

Jmeter聚合报告导出log文档 在Filename中输入 EKS_perf_log\\${type}_log\\${__P(UNIQUEID,${__time(YMDHMS)})}\all-graph-results-log.csv 可以得到执行的log&#xff0c;文件夹包含时间戳 Jmeter聚合报告导出到CSV 点击Save Table Data&#xff0c;保存到CSV文件中

OpenAPI Generator:API开发的瑞士军刀

一、工具介绍 OpenAPI Generator是基于OpenAPI规范(Swagger)的代码生成工具&#xff0c;支持50种编程语言的客户端/服务端代码生成。其核心价值在于&#xff1a; 自动化生成⇒减少重复劳动规范API开发流程 核心能力矩阵&#xff1a; 功能支持示例客户端SDK生成Java/Python/T…

【Linux探索学习】第二十七弹——信号(上):Linux 信号基础详解

Linux学习笔记&#xff1a; https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言&#xff1a; 前面我们已经将进程通信部分讲完了&#xff0c;现在我们来讲一个进程部分也非常重要的知识点——信号&#xff0c;信号也是进程间通信的一…

DeepSeek行业应用实践报告-智灵动力【112页PPT全】

DeepSeek&#xff08;深度搜索&#xff09;近期引发广泛关注并成为众多企业/开发者争相接入的现象&#xff0c;主要源于其在技术突破、市场需求适配性及生态建设等方面的综合优势。以下是关键原因分析&#xff1a; 一、技术核心优势 开源与低成本 DeepSeek基于开源架构&#xf…

探索AI新前沿,CoT推理赋能文生图!港中文首次提出文生图的o1推理和inference scaling新范式

OpenAI的o1模型凭借思维链&#xff08;Chain-of-Thought, CoT&#xff09;技术&#xff0c;在推理能力上实现了质的飞跃&#xff0c;引领了大模型理解领域的新风尚。然而&#xff0c;这一创新的火花能否照亮图像生成领域&#xff1f;近日&#xff0c;来自香港中文大学、北京大学…

C# | GDI+图像测距辅助线的实现思路

C# | GDI图像测距辅助线的实现思路 文章目录 C# | GDI图像测距辅助线的实现思路一、辅助线需求概述二、坐标系与角度计算2.1 笛卡尔坐标系2.2 线长和角度计算方法2.3 文本角度矫正计算方法2.4 坐标变换实现步骤 三、与if判断方式对比四、总结 一、辅助线需求概述 在图像测量工…