当前位置: 首页 > news >正文

Springboo整合Sentinel

Springboo整合Sentinel

1.启动Sentinel

java -jar sentinel-dashboard-1.8.6.jar

2.访问localhost:8080到Sentinel管理界面(默认账号和密码都是sentinel)

在这里插入图片描述

3.引入依赖(注意版本对应)

        <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.0.5.0</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-sentinel --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2021.0.5.0</version></dependency>

4.编写配置文件

spring:cloud:sentinel:transport:dashboard: localhost:8080port: 8719
server:port: 8081

这里的spring.cloud.sentinel.transport.port端口配置会在应用对应的服务器上启动一个Http Server,该Server会与Sentinel控制台交互。比如Sentinel控制台添加了一个限流规则,会把规则数据push给这个Http Server接收,Http Server再将规则注册到Sentinel中。

5.编写controller,启动项目

@RestController
public class MyController {@GetMapping("/test01")public String test01(){return "hello sentinel";}
}

Sentinel采用懒加载机制,这时Sentinel控制台中并没有该服务信息,先访问接口,才会在Sentinel控制台中显示。
在这里插入图片描述

Sentinel基本限流规则

1.流控规则

在这里插入图片描述
解释说明:
资源名:唯一名称,默认请求路径
针对来源:Sentinel可以针对调用者进行限流,填写微服务名称(需要将服务注册到服务中心),默认default(不区分来源)
阈值类型/单机阈值:
- QPS(每秒的请求数量):当调用api的QPS达到阈值的时候,进行限流。
- 线程数:当调用该api的线程数达到阈值的时候,进行限流
是否集群:不需要集群
流控模式:
- 直接:api达到限流条件时,直接限流
- 关联:当关联的资源达到阈值时,就限流自己
- 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)【api级别的针对来源】
流控效果:
- 快速失败:直接失败,抛异常
- Warm Up:根据codeFactor(冷加载因子,默认3)的值,从阈值/codeFactor,经过预热时长,才达到设置的QPS阈值
- 排队等待:匀速排队,让请求以匀速的速度通过,阈值类型必须设置QPS,否则无效

2.降级规则

1.慢调用比例

在这里插入图片描述
慢调用比例:选择以慢调用比例作为阈值,需要设置慢调用比例作为阈值,需要设置允许的慢调用RT(即最大响应时间),响应时间大于该值则统计为慢调用。当单位统计时长内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后的熔断器会进入探测恢复状态(HALF-OPEN状态),若接下来的请求响应时间小于设置的慢调用RT,则结束熔断,若大于设置的慢调用RT,则会再次被熔断。

2.异常比例

在这里插入图片描述
异常比例:当单位统计时长内请求数目大于设置的最小请求数目,并且异常数比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后,熔断器会进入探测恢复状态(HALF-OPEN状态),若接下来的请求成功完成(没有错误)。则结束熔断,否则会再次被熔断。

3.异常数

在这里插入图片描述
异常数:当单位统计时长内的异常数目超过阈值后会自动熔断,经过熔断时长后,熔断器会进入探测恢复状态(HALF-OPEN状态),若接下来的请求成功完成(没有错误)。则结束熔断,否则会再次被熔断。

热点key限流

何为热点?热点即为经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的Top K数据,并对其访问进行限制。
比如:

  • 商品id为参数,统计一段时间内最常购买的商品id并进行限制
  • 用户id为参数,针对一段时间内频繁访问的用户id进行限制

热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量限制,仅对包含热点参数的资源调用

在这里插入图片描述

1.使用@SentinelResource实现自定义限流与熔断

controller代码

@RestController
public class MyController {@GetMapping("/test01")@SentinelResource(value = "test01",blockHandlerClass = MyHandler.class,blockHandler = "test01block",fallbackClass = MyHandler.class,fallback = "test01Fallback")public String test01(@RequestParam String uid){return "hello sentinel";}
}

handler代码(注意:自定义处理类中的限流与熔断方法必须是public static)

public class MyHandler {public static String test01block(BlockException blockException){return "自定义限流";}public static String test01Fallback(Exception e ){return "自定义熔断";}
}

添加配置(资源名要与 @SentinelResource的value相同)

在这里插入图片描述
blockHandler处理Sentinel控制台方面配置的异常,fallback处理代码的异常。

http://www.lryc.cn/news/181572.html

相关文章:

  • python爬取csdn个人首页中的所有封面
  • EasyHttp - 网络请求,如斯优雅
  • 【Java】Stream的基本使用
  • idea Springboot 高校科研资源共享系统VS开发mysql数据库web结构java编程计算机网页源码maven项目
  • 机器学习算法基础--K-means应用实战--图像分割
  • CSS学习小结
  • 数据挖掘实验(一)数据规范化【最小-最大规范化、零-均值规范化、小数定标规范化】
  • C++17中std::filesystem::directory_entry的使用
  • C/C++跨平台构建工具CMake入门
  • 【CFD小工坊】浅水方程的离散及求解方法
  • 第十四章 类和对象——C++对象模型和this指针
  • 计算机竞赛 深度学习卫星遥感图像检测与识别 -opencv python 目标检测
  • java web+Mysql e-life智能生活小区物业管理系统
  • AttributeError: module ‘dgl‘ has no attribute ‘batch_hetero‘
  • Vue项目搭建图文详解教程
  • SpringMVC处理请求核心流程
  • SoloX:Android和iOS性能数据的实时采集工具
  • 【知识点随笔分析 | 第五篇】简单介绍什么是QUIC
  • vscode ssh 远程免密登录开发
  • 辅助驾驶功能开发-测试篇(2)-真值系统介绍
  • 运行程序时msvcr110.dll丢失的解决方法,msvcr110.dll丢失5的个详细解决方法
  • 已解决 Bug——IndexError: index 3 is out of bounds for axis 0 with size 3问题
  • WEB3 solidity 带着大家编写测试代码 操作订单 创建/取消/填充操作
  • c++-vector
  • 十四天学会C++之第二天(函数和库)
  • 蓝桥杯每日一题2023.10.3
  • JavaScript系列从入门到精通系列第十二篇:JavaScript中对象的简介和对象的基本操作以及JavaScript中的属性值和属性名
  • OpenCV实现视频的追踪(meanshift、Camshift)
  • 并查集详解(原理+代码实现+应用)
  • 第k小的数