Sentinel限流-@SentinelResource注解配置

news2024/11/28 5:46:10

@SentinelResource 配置-上 (按资源名配置限流规则)

1) Sentinel 控制台配置流控规则:

2)java 代码:

    @GetMapping("/byResource")
    @SentinelResource(value = "byResource", blockHandler = "handException")
    public BaseResponse byResource() {
        log.info("按资源名限流ok");
        return BaseResponse.returnSuccess(new Payment(2023, "serial001"));
    }

    public BaseResponse handException(BlockException exception) {
        return BaseResponse.returnFault(exception.getClass().getCanonicalName() + "\t 服务不可用");
    }

3)测试-按资源名限流-提示自定义异常信息:

根据上述配置的流控规则:每秒只支持一个请求访问资源 byResource,超过就会限流;

我们每秒请求2次,系统对请求资源限流,返回自定义的错误信息,而不是默认的流控提示信息;

为什么返回的是自定义的信息呢??

因为 @SentinelResource(value = "byResource", blockHandler = "handException") 中 blockHandler 属性配置的方法 handException是兜底方法;请求不符合流控规则就会触发 blockHandler 属性配置的方法;

 http://localhost:8401/byResource

4)测试-提示系统默认的异常信息

 也可以直接使用 @SentinelResource(value = "byUrl"),不配置 blockHandler 属性,再对 /rateLimit/byUrl 配置流控规则,请求不符合流控规则提示信息则是Sentinel默认的报错信息,而不是我们类似上面的自定义报错信息;

    @GetMapping("/rateLimit/byUrl")
    @SentinelResource(value = "byUrl")
    public BaseResponse byUrl() {
        log.info("按url限流测试ok");
        return BaseResponse.returnSuccess(new Payment(2023, "serial002"));
    }

 @SentinelResource 配置-中、下

 blockHandler属性配置的兜底方案面临的问题:

a、没有提现我们自己的业务要求;

b、依照现有条件,我们自定义的处理方法又和业务代码耦合在一块,不直观;

c、每个业务方法都加一个兜底的方法,那代码膨胀加剧;

d、全局统一的方法没有体现;

如何解决上面面临的问题??(自定义统一异常处理逻辑)

1)创建CustomerBlockHandler类用于自定义限流处理逻辑;

(自定义限流处理类 CustomerBlockHandler)

注:@SentinelResource 注解方式代理不支持 private 方法;

public class CustomerBlockHandler {

    public static BaseResponse handleException(BlockException exception) {
        return BaseResponse.returnSuccess("客户自定义限流处理信息....CustomerBlockHandler");
    }
    public static BaseResponse handleException2(BlockException exception) {
        return BaseResponse.returnSuccess("客户自定义限流处理信息....CustomerBlockHandler2");
    }
}

2)修改类 RateLimitController

blockHandlerClass 属性:指定自定义逻辑处理的类;

blockHandler 属性:指定需要处理的方法名;

@GetMapping("/rateLimit/customerBlockHandler")
@SentinelResource(value = "customerBlockHandler",blockHandlerClass = CustomerBlockHandler.class,blockHandler = "handleException2")
public BaseResponse CustomerBlockHandler() {
        log.info("客户自定义限流处理逻辑");
        return BaseResponse.returnSuccess(new Payment(2023, "serial003"));
 }

 3)配置资源名限流规则并测试

 测试的请求地址:http://localhost:8401//rateLimit/customerBlockHandler

 每秒请求此接口2次,触发流控规则,马上限流;

注:这里访问的地址就是@GetMapping 配置的请求处理方法,流控规则配置的就是注解@SentinelResource 的资源名(value属性)上的;

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

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

相关文章

Django项目——通过APIView实现API访问

前提 该文章在已有项目的基础上进行修改 https://blog.csdn.net/qq_38122800/article/details/128583379?spm1001.2014.3001.5502 1、配置序列化器 序列化器包含序列化和反序列化两个过程,简单点理解就是 序列化 : 将从数据库中查的数据变为前端页面可以接受的json数据 反…

Odoo 16 企业版手册 - 库存管理之重订货规则

重订货规则 在Odoo 库存模块中,您可以配置一组规则,帮助您确保库存永远不会用完。Odoo将尝试使用重订货规则在您的库存中保持至少最低数量的产品。让我们看看此功能在Odoo 16中是如何工作的。为此,您可以从库存模块中选择一个可存储的产品。 …

qt学习记录

一、新建项目时只有pro文件而没有其他文件 此时需要在Kits界面将所有编译器选择,即可出现其他文件 二、QMainWindow、QWidget、QDialog的区别 ①QWidget继承于QObject和QPaintDevice,QDialog和QMainWindow则继承于QWidget,QDialog、QMainWi…

[ 数据结构 ] 弗洛伊德算法(Floyd)--------最短路径问题

0 Floyd算法介绍 和 Dijkstra 算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978 年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特弗洛伊德命名弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路…

新应用——信息化财务管理,一站式满足多个需求

财务管理应用是企业为了适应当下社会环境提出的一种将财务管理进行信息化管理的方法,与传统财务管理模式不同,将各类业务数据编制为电子数据,便于财务人员查找数据内容,可以更高效的开展工作。百数应用中心的财务管理应用涵盖了项…

机器学习笔记之深度信念网络(二)模型构建思想(RBM叠加结构)

机器学习笔记之深度信念网络——模型构建思想引言回顾:深度信念网络的结构表示解析RBM隐变量的先验概率通过模型学习隐变量的先验概率引言 上一节介绍了深度信念网络的模型表示,本节将介绍深度信念网络的模型构建思想——受限玻尔兹曼机叠加结构的基本逻…

Flutter多分支打包持续化集成

一、使用效果演示 1.1、选择参数打包 以下为参数使用说明。 packingType枚举 android、ios android ios android&ios (新功能:并行打包)备注: android、ios:串行打包,即先打一个再打一个 android&ios:为并行…

与香港财政司司长同台,欧科云链在这场峰会上都说了啥?

今天,POWER 2023香港Web3创新者峰会在中国香港如期召开,香港特别行政区政府财政司司长陈茂波、财经事务及库务局副局长陈浩濂、全国政协委员、立法会议员吴杰庄等港府要员出席峰会。 作为本场峰会的受邀企业,欧科云链控股(01499.HK)公司执行董…

Kernel Pwn基础教程之 Double Fetch

一、前言 Double Fetch是一种条件竞争类型的漏洞,其主要形成的原因是由于用户态与内核态之间的数据在进行交互时存在时间差,我们在先前的学习中有了解到内核在从用户态中获取数据时会使用函数copy_from_user,而如果要拷贝的数据过于复杂的话…

人工智能-正则表达式

目录1、正则表达式概述2、re模块3、匹配单个字符4、匹配多个字符5、匹配开头和结尾6、匹配分组7、总结1、正则表达式概述 在实际开发过程中经常会需要查找某些复杂字符串的格式 正则表达式:记录文本规则的代码 正则表达式特点: 语法令人头疼&#xff…

立创eda专业版学习笔记(4)(隐藏铺铜)

这里的隐藏有两个意思,一个是铺铜过后把铺铜的填充区域隐藏,方便看图,另外一个是隐藏铺铜的轮廓,方便后续改进。 第一种隐藏,隐藏铺铜的填充区域(成片的图块),但是保留轮廓线 这是全…

联想LJ2655DN激光打印机清零方法

联想LJ2655DN激光打印机是市面上常见的打印机,为了节约成本,我们一般使用都是代用硒鼓来代替原装硒鼓,但是发现更换完硒鼓以后还是不能打印甚至有的机器能够打印但是打印速度会变慢或很慢,这个时候这就需要我们对打印机进行清零复位操作了,此款机器因用户更换的硒鼓类型不…

C++ 模板进阶

目录 1. 非类型模板参数 2. 模板的特化 2.1 概念 2.2 函数模板特化 2.3 类模板特化 2.3.1 全特化 2.3.2 偏特化 2.3.3 类模板特化应用示例 3. 模板总结 1. 非类型模板参数 我们在C语言中使用数组的时候可以定义静态数组,但是有个缺陷就是编译器在对越界检查…

Java自定义泛型类注意点

目录 自定义泛型类 如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型 由于子类在继承带泛型的父类时,指明了泛型类型。则实例化子类对象时,不需要指明类型 由于子类在继承带泛型的父类时,没有…

WebDAV之葫芦儿·派盘 + Photosync

PhotoSync 支持WebDAV方式连接葫芦儿派盘。 苹果手机通过无线传输,备份和共享照片/视频到计算机,其他手机,NAS和流行的云和照片服务的最佳解决办法,快来试下PhotoSync同步工具吧。 PhotoSync面向移动设备

安装部署wordpress(Ubuntu)

wordpress是一个目前流行的基于web的内容管理系统软件。它是基于PHP语言和MySQL数据库开发的,用户可以在支持 PHP 和 MySQL数据库的服务器上快速轻松的部署自己的网站(博客,外贸网站等等)。WordPress有非常多的第三方开发的免费模…

产线工控安全之现状分析及方案应对

产线安全现状 工业控制系统是支撑国民经济的重要设施,是工业领域的神经中枢。现在工业控制系统已经广泛应用于电力、通信、化工、交通、航天等工业领域,支撑起国计民生的关键基础设施。 随着传统的工业转型,数字化、网络化和智能化的工业控…

数学建模---数值微积分

目录 一.引言 二.数值微分 1.数值差分与差商 利用matlab观察差分与差商的区别: 例题: 二.数值积分 1.数值积分基本定理 2.常见的数值积分公式: 积分公式的精度: 3.数值积分的matlab实现 一.引言 在科学研究和工程计算中&…

LINUX提权之环境变量提权篇

前言 上一篇文章给大家介绍了linux中的内核提权的一些知识点不知道大家学的怎么样了,今天给大家带来一个全新的提权方法——“环境变量提权”,本文会介绍关于环境变量提权的基本知识以及利用方法。 环境变量提权 PATH是Linux系统中的环境变量,指定存储…

全球月活用户4年破10亿,TikTok的3大底层逻辑

武汉瑞卡迪电子商务有限公司:在即将过去的2022年,TikTok成为了众多出海品牌想要赢得新生意的重要平台。品牌应该如何看待TikTok?如何利用节点营销抓住机会?那些已经在TikTok上成功的品牌背后,是否有一些定式&#xff0…