SpringCloudAlibaba之Sentinel 自定义限流逻辑处理

2023-10-27

@SentinelResource 自定义限流逻辑处理

​Sentinel 提供了@SentinelResource注解用于定义资源,并提供了AspectJ的扩展用于自定义资源,处理BlockException等。

案例复习

之前我们用过这个注解,同时了解了它的两个属性:

  • value:资源名称,必须项(唯一,不能为空)
  • blockHandler:对应处理BlockException的函数名称可选项.blockHandler函数访问需要public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为BlockException.blockHandler 函数默认需要和原方法在同一个类中

我们之前利用这个注解完成了热点规则的学习,同时做了一个案例,我们简单复习一下,这个案例的核心思想就是我们传递一个指定参数,然后通过注解@SentinelResource注解标注资源进行限流,当出现限流以后,通过blockHandler属性设置限流以后的解决方法。

在这里插入图片描述

其实这个注解不仅仅可以用到热点规则上,还可以用到流控上,我们可以做一个资源的流控和一个请求的流控,通过此注解来解决限流之后问题。

@SentinelResource 资源限流

核心点: 使用@SentinelResource注解的blockHandler属性,定义出现限流效果时的解决方法。

编写一个新的控制器类型SentinelResourceTestController,使用@SentinelResource注解同时使用blockHandler属性

@GetMapping("/byResource")
@SentinelResource(value = "byResource",blockHandler = "handler_resource")
public String byResource(){
    return "-----byResource";
}

public String handler_resource(BlockException exception){
    return "系统繁忙";
}

这里要注意一定要给byResource资源添加流控

在这里插入图片描述

具体规则

测试,测试我们去快速访问http://localhost:8401/byResource,就会出现我们使用@SentinelResource注解中blockHandler属性提供的解决限流异常的方法。

在这里插入图片描述

@SentinelResource URL限流

核心点: 使用@SentinelResource注解,但是不使用blockHandler属性,系统会调用默认限流异常处理方法。

其实这个注解,我们还可以更换请求地址为资源,比如我们在新建一个测试接口方法

@GetMapping("/byRest")
@SentinelResource(value = "/byRest")
public String byRest(){
    return "-----byRest";
}

给这个接口地址添加流控

在这里插入图片描述

此时如果没有自己定义限流处理方法,会走系统默认的

在这里插入图片描述

结论

  1. @SentinelResource 既可以配置资源名称也可以配置URL
  2. 如果配置了@SentinelResource的blockHandler属性对应方法,出现限流会调用对应方法
  3. 如果没有配置@SentinelResource的blockHandler属性,系统会走默认的限流处理。

自定义限流处理逻辑

其实我们在使用@SentinelResource注解这两种方案的时候,会出现一些问题:

  1. 没有体现我们自己的业务要求。
  2. 自定义处理方法和业务代码耦合在一起。
  3. 每个业务方法都添加一个限流处理方法,代码将会加剧膨胀。
  4. 无法实现统一全局处理。

解决:@SentinelResource除了blockHandler可以设置自定义限流处理逻辑方法以外,还提供另外一个属性来设置限流处理逻辑类型blockHandlerClass属性,此属性中设置的方法必需为 static 函数,否则无法解析。

具体逻辑

第一步

创建CustomerBlockHandler类型用于处理自定义限流处理逻辑,首先创建myhandler.CustomerBlockHandler

/**
 * 此类型用来处理限流自定义逻辑
 */
public class CustomerBlockHandler {
    public static String handlerException1(BlockException exception){
        return "handlerException1:系统异常,请稍后重试!";
    }
    public static String handlerException2(BlockException exception){
        return "handlerException2:网络崩溃了,请稍后重试!";
    }
}

第二步

我们在SentinelResourceTestController类型中添加一个接口方法,同时设置@SentinelResource注解和blockHandlerClass属性对应的类型和这个类型中对应的处理方法

/**
* 此方法用到了自定义限流处理类型CustomerBlockHandler
* 中的handlerException1方法来处理限流逻辑。
*/
@GetMapping("/bycustomer")
@SentinelResource(value = "bycustomer",
                  blockHandlerClass = CustomerBlockHandler.class,
                  blockHandler = "handlerException1")
public String bycustomer(){
    return "-----bycustomer";
}

第三步

测试:给bycustomer资源添加限流规则,然后来测试在超过限流阈值时处理方法是否为CustomerBlockHandler中handlerException1来进行处理。

在这里插入图片描述

在这里插入图片描述

添加流控规则以后,我们再来频繁访问http://localhost:8401/bycustomer,就会看见是CustomerBlockHandler类型的handlerException1方法来处理自定义限流逻辑

在这里插入图片描述

对应关系图

localhost:8401/bycustomer,就会看见是CustomerBlockHandler类型的handlerException1方法来处理自定义限流逻辑

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringCloudAlibaba之Sentinel 自定义限流逻辑处理 的相关文章

随机推荐

  • C++构造函数/拷贝控制

    1 C 构造函数 C 中构造函数 constructor 的作用是用来控制类对象的初始化过程 构造函数的作用是初始化类对象的数据成员 无论何时只要类的对象被创建 就会执行构造函数 1 1 默认构造函数 当定义一个类对象时 如果没有为对象提供
  • Git详细安装教程

    对于Git这块 我也算是个小白 最近在学习Git 所以趁此机会详细讲解一下Git的安装教程以及安装过程中遇到的问题 也欢迎大家对其补充 共同进步 1 下载Git Git的下载地址 windows系统 http gitforwindows o
  • Laravel_arse error: syntax error, unexpected '?'

    解决办法 php的版本不对 先打开composer phar 看看版本是否符合要求 之后修改服务器的php版本 我用的是wamp套餐 把php版本修改为7 2 4 建议也把编译器里的php开发环境统一为7 2 4
  • linux中嵌套循环,linux中的嵌套循环

    嵌套循环 内循环 一条循环语句可以在循环中使用任何类型的命令 包括其他循环命令 示例1 bin bash for a 1 a lt 3 a do echo Starting loop a for b 1 b lt 3 b do echo I
  • ezStudio,易用高效的业务基础平台开发工具

    摘要 本文从业务基础平台谈起 引申出与业务基础平台息息相关的开发工具 通过对国内外开发工具现状与未来趋势的描述 引导读者对开发工具有一个较为全面的了解 最后对清华同方ezONE 易众 业务基础平台中的ezStudio开发工具作了重点介绍与说
  • java excel通用工具类

    public class ExcelUtils 有时间记得重构下 生成excel流 throws IOException param type xone 1 lr 2 public static String createExcelIO L
  • TOP16之CSRF -- 小黑超细详解+案例说明<宝藏文>

    CSRF 跨站请求伪造 很好理解 就是盗用别人的身份伪造请求发送给服务器 在未授权的情况下执行权限保护之内的操作 因为请求的一切流程都是正常操作 这也是一般不会被检测到的漏洞行为 小黑子们 撸起袖子加油干 目录 CSRF 理解 判断是否有C
  • css set a4 paper size

    HTML div class book div class page div class subpage Page 1 2 div div div class page div class subpage Page 2 2 div div
  • 基于PCL的RANSAC(随机采样一致)算法简介与示例

    前言 RANSAC Random sample consensus 随机采样一致 是3D点云拟合的一种重要的手段 可以对直线 圆 平面 圆球 圆柱等形状的点云进行拟合 其优点在于可以最大程度上减少噪声点对拟合效果的影响 一 RANSAC R
  • Python Matplotlib绘制柱状图(bar和barh函数)详解

    前言 本文的文字及图片来源于网络 仅供学习 交流使用 不具有任何商业用途 如有问题请及时联系我们以作处理 PS 如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资料以及群交流解答点击即可加入 使用 Mat
  • 如何在ASP.NET中用OWC绘制图表

    Version 1 0 StartHTML 000000201 EndHTML 000096358 StartFragment 000002217 EndFragment 000096290 StartSelection 000002217
  • 蓝桥杯模拟题

    第一题 难度系数 2 满分 50 分 编程实现 用户输入一个正整数 N 将 1 N 之间的偶数输出 样例输入 提示 以下 为背景的信息是程序输出内容 请输入一个正整数 N 10 样例输出 2 4 6 8 将程序命名为 LQ001 评分标准
  • Kotlin1.8新特性

    Kotlin1 8 0新特性 新特性概述 JVM 的新实验性功能 递归复制或删除目录内容 提升了 kotlin reflect 性能 新的 Xdebug 编译器选项 提供更出色的调试体验 kotlin stdlib jdk7 与 kotli
  • 多语言版本 UI资源切换

    1 如果窗体资源和源码里面所使用的字符串资源 都已经存在于资源视图里面 则通过下面方式来实现 LANGID lid GetSystemDefaultLangID if 0x0809 lid 英语 0x0809 SetThreadUILang
  • 【计算机毕业设计】网上商城购物系统

    网上商城购物系统 随着科学技术的飞速发展 社会的方方面面 各行各业都在努力与现代的先进技术接轨 通过科技手段来提高自身的优势 网上商城购物系统当然也不能排除在外 网上商城购物系统是以实际运用为开发背景 运用软件工程原理和开发方法 采用spr
  • Verilog 实现奇偶校验

    1 奇偶效验 parity check 是一种校验代码传输正确性的方法 根据被传输的一组二进制数位中 1 的个数是奇数或者偶数来进行校验 采用奇数校验的称之为奇校验 反之称之为偶校验 采用哪种校验是事先规定的 通常会设置一个奇偶效验位 用它
  • Hbase基本概念

    一 Hbase介绍 1 Hbase一个分布式的基于列式存储的数据库 基于Hadoop的hdfs存储 zookeeper进行管理 2 Hbase适合存储半结构化或非结构化数据 对于数据结构字段不够确定或者杂乱无章很难按一个概念去抽取的数据 3
  • Qt 常用类 (4)—— QPoint

    Qt 常用类 4 QPoint 标签 qt 2012 05 12 11 48 7201人阅读 评论 0 收藏 举报 分类 Qt开发 33 版权声明 本文为博主原创文章 未经博主允许不得转载 QPoint 类代表一个坐标点 实现在 QtCor
  • java毕业设计——基于java+JSP+MySQL的网上订餐管理系统设计与实现(毕业论文+程序源码)——网上订餐管理系统

    基于java JSP MySQL的网上订餐管理系统设计与实现 毕业论文 程序源码 大家好 今天给大家介绍基于java JSP MySQL的网上订餐管理系统设计与实现 文章末尾附有本毕业设计的论文和源码下载地址哦 需要下载开题报告PPT模板及
  • SpringCloudAlibaba之Sentinel 自定义限流逻辑处理

    SentinelResource 自定义限流逻辑处理 Sentinel 提供了 SentinelResource注解用于定义资源 并提供了AspectJ的扩展用于自定义资源 处理BlockException等 案例复习 之前我们用过这个注解