Springboo整合Sentinel

news2024/11/24 8:41:19

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:8080
        port: 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.coloradmin.cn/o/1057221.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

window环境下Redis7服务器的安装和运行

一、readis7的下载 由于在官网上没有window版本的redis下载&#xff0c;需要到github中去搜索&#xff0c;以下以redis7为例介绍redis的下载 下载地址&#xff1a;https://github.com/zkteco-home/redis-windows 也可以到百度网盘下载 链接&#xff1a;https://pan.baidu.com…

【JavaSE重点知识归纳】第3节:运算符(算术、关系、逻辑、位、移位、优先级)

目录 一&#xff1a;什么是运算符 二&#xff1a;算术运算符 1.基本四则运算符&#xff1a;加减乘除模&#xff08;、-、*、/、%&#xff09; 2.增量运算符&#xff08;、-、*、%&#xff09; 3.自增/自减运算符&#xff08;、--&#xff09; 三&#xff1a;关系运算符 四…

【Kafka专题】Kafka集群架构设计原理详解

目录 前言前置知识课程内容一、Kafka的Zookeeper元数据梳理1.1 zookeeper整体数据1.2 Controller Broker选举机制1.3 Leader Partition选举机制1.4 Leader Partition自动平衡机制*1.5 Partition故障恢复机制1.6 HW一致性保障-Epoch更新机制1.7 总结 学习总结感谢 前言 Kafka的…

R语言实现竞争风险模型(1)

#竞争风险模型 tmp <- data.frame(gene tiaoxuan[,5:6],OS.Time Train[,"Survival_months"], OS Train[,"CSS"],stringsAsFactors F) colnames(tmp) #方法1&#xff1a;riskregression library(riskRegression) fgr1<-FGR(Hist(OS.Time,OS)~gen…

K 个一组翻转链表(链表反转,固定长度反转)(困难)

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你链表的头节点head&#xff0c;每k个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是k的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。…

Android SELinux 参数语法介绍及基础分析

Android SELinux安全策略主要使用对象安全上下文的基础进行描述&#xff0c;通过主体和客体的安全上下文去定义主体是否有权限访问客体&#xff0c;称为TypeEnforcement 安全上下文&#xff08;Security Context&#xff09; SEAndroid中的安全上下文:共有4个部分组成分别为use…

STM32 定时器介绍--通用、高级定时器

目录 高级定时器 1.功能框图 1-时钟源 2-时基单元 3-输入捕获 4-输出比较 2.输入捕获的应用 3.输出比较的应用 4.初始化结构体 1-时基初始化结构体 2-输出比较结构体 3-PWM信号 周期和占空比的计算--以通用定时器为例 4-输入捕获结构体 5-断路和死区初始化结构体…

05. 机器学习入门 - 动态规划

文章目录 从一个案例开始动态规划 Hi, 你好。我是茶桁。 咱们之前的课程就给大家讲了什么是人工智能&#xff0c;也说了每个人的定义都不太一样。关于人工智能的不同观点和方法&#xff0c;其实是一个很复杂的领域&#xff0c;我们无法用一个或者两个概念确定什么是人工智能&a…

对一条Linux命令的解读(sed find egrep)

目录 1 sed -i的意义 2 $的作用 3 find . -type f的意义 4 -exec .... {} \;的意义 5 egrep -l的意义 6 综合以上 在前面的博客源码编译elfutils_金色熊族的博客-CSDN博客中&#xff0c;我使用了一条指令 sed -i s/-Werror//g $(find . -type f -exec egrep -l _no_Werr…

学信息系统项目管理师第4版系列15_资源管理基础

1. 项目资源 1.1. 实物资源 1.1.1. 着眼于以有效和高效的方式&#xff0c;分配和使用完成项目所需的实物资源 1.1.2. 包括设备、材料、设施和基础设施 1.2. 团队资源 1.2.1. 人力资源 1.2.2. 包含了技能和能力要求 2. 人力资源管理 2.1. 不仅是组织中最重要的资源之一&…

C语言结构体指针学习

结构体变量存放内存中&#xff0c;也有起始地址&#xff0c;定义一个变量来存放这个地址&#xff0c;那这个变量就是结构体指针&#xff1b; typedef struct mydata{int a1;int a2;int a3; }mydata;void CJgtzzView::OnDraw(CDC* pDC) {CJgtzzDoc* pDoc GetDocument();ASSERT…

【算法分析与设计】回溯法(上)

目录 一、学习要点1.1 回溯法1.2 问题的解空间1.3 0-1背包问题的解空间1.4 旅行售货员问题的解空间1.5 生成问题状态的基本方法 二、回溯法的基本思想三、回溯算法的适用条件四、递归回溯五、迭代回溯六、子集树与排列树七、装载问题八、批处理作业调度问题 一、学习要点 理解回…

Scala第十一章节

Scala第十一章节 1.模式匹配 2. Option 类型 3.偏函数 4.正则表达式 5.异常处理 6.提取器 7.案例&#xff1a;随机职业 scala总目录 文档资料下载

大数据Flink(九十五):DML:Window TopN

文章目录 DML:Window TopN DML:Window TopN Window TopN 定义(支持 Streaming):Window TopN 是一种特殊的 TopN,它的返回结果是每一个窗口内的 N 个最小值或者最大值。 应用场景

【C语言】模拟实现strstr

strstr这个库函数看到这个名字大概率猜不到这是什么函数&#xff0c; 但经过学习就可以很好的认识到这个函数 目录 介绍&#xff1a;模拟实现&#xff1a;思路&#xff1a;代码实现&#xff1a; 介绍&#xff1a; 可以看到此函数是用来寻找一个字符串中是否含有另一个字符串 代…

云安全之HTTP协议介绍补充

HTTP是一个基于TCP/IP通信协议来传递数据的协议&#xff0c;传输的数据类型为HTML文件、图片文件、查询结果等。HTTP协议一般用于B/S架构。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。 URI、URL、URN HTTP使用统一资源标识符(Uniform Resource ldentif…

WebSocket实战之二协议分析

一、前言 上一篇 WebSocket实战之一 讲了WebSocket一个极简例子和基础的API的介绍&#xff0c;这一篇来分析一下WebSocket的协议&#xff0c;学习网络协议最好的方式就是抓包分析一下什么就都明白了。 二、WebSocket协议 本想盗一张网络图&#xff0c;后来想想不太好&#x…

ImportSelector使用详解

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl ImportSelector概述 利用Import和ImportSelector可将组件批量添加至IoC容器 ImportSelector案例 在此&#xff0c;介绍ImportSelector使用案例。 定义ImportSelector S…

Kotlin前置检测判断check,require,requireNotNull

Kotlin前置检测判断check&#xff0c;require&#xff0c;requireNotNull &#xff08;1&#xff09;check fun main(args: Array<String>) {val b falsecheck(b) {println("check $b")}println("end") } check监测到值非真时候&#xff0c;抛出一…

国庆作业day5

应用层&#xff1a;提供用户与网络应用程序之间的接口。表示层&#xff1a;负责数据的格式转换、加密和解密。会话层&#xff1a;负责建立、管理和终止会话。它提供会话控制和同步&#xff0c;允许应用程序之间建立连接和交换数据。传输层&#xff1a;提供端到端的连接。网络层…