SentinelResource配置

news2024/10/5 21:15:51

1.SentinelResource配置(上)

1.1.按资源名称限流 + 后续处理

1.1.1.启动Nacos成功

1.1.2.启动Sentinel成功

1.1.3.添加控制器

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.tianxia.alibaba.entity.CommonResult;
import com.tianxia.alibaba.entity.Payment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 按资源名称限流 + 后续处理
 * @author liqb
 * @date 2023-05-26 15:06
 */
@RestController
public class RateLimitController {

    /**
     * SentinelResource配置(上)
     * @author liqb
     * @date 2023-05-26 22:06
     * @return
     */
    @GetMapping("/byResource")
    @SentinelResource(value = "byResource", blockHandler = "handleException")
    public CommonResult byResource() {
        return new CommonResult(200, "按资源名称限流测试OK", new Payment(2020L,"serial001"));
    }
    public CommonResult handleException(BlockException exception) {
        return new CommonResult(444, exception.getClass().getCanonicalName()+"\t 服务不可用");
    }
}

1.1.4.配置流控规则

配置步骤

在这里插入图片描述

图形配置和代码关系

表示1秒钟内查询次数大于1,就跑到我们自定义的处流,限流

1.1.5.测试

1秒钟点击1下,OK http://localhost:8401/byResource

超过上述,疯狂点击,返回了自己定义的限流处理信息,限流发生

{"code":444, "message":"com.alibaba.csp.sentinel.slots.block.flow.FlowException\t 服务不可用", "data":null}

额外问题

此时关闭问服务8401 -> Sentinel控制台,流控规则消失了

1.2.按照Url地址限流 + 后续处理

1.2.1.启动Nacos成功

1.2.2.启动Sentinel成功

通过访问的URL来限流,会返回Sentinel自带默认的限流处理信息

1.2.3.添加控制器

@RestController
public class RateLimitController {
	...

    /**
     * 按照Url地址限流 + 后续处理
     * @author liqb
     * @date 2023-05-26 22:25
     * @return
     */
    @GetMapping("/rateLimit/byUrl")
    @SentinelResource(value = "byUrl")
    public CommonResult byUrl() {
        return new CommonResult(200,"按url限流测试OK",new Payment(2020L,"serial002"));
    }
}

1.2.4.Sentinel控制台配置

在这里插入图片描述

1.2.5.测试

  • 快速点击http://localhost:8401/rateLimit/byUrl
  • 结果 - 会返回Sentinel自带的限流处理结果 Blocked by Sentinel (flow limiting)

上面兜底方案面临的问题

  1. 系统默认的,没有体现我们自己的业务要求。
  2. 依照现有条件,我们自定义的处理方法又和业务代码耦合在一块,不直观。
  3. 每个业务方法都添加—个兜底的,那代码膨胀加剧。
  4. 全局统—的处理方法没有体现。

2.SentinelResource配置(中)

2.1.客户自定义限流处理逻辑

2.1.1.自定义限流处理类 - 创建CustomerBlockHandler类用于自定义限流处理逻辑

package com.tianxia.springcloud.myhandler;

import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.tianxia.alibaba.entity.CommonResult;

/**
 * @author: liqb
 * @date: 2023-05-26 2:41
 */
public class CustomerBlockHandler {

    public static CommonResult handlerException01(BlockException exception) {
        return new CommonResult(4444,"按客戶自定义,global handlerException----1");
    }

    public static CommonResult handlerException02(BlockException exception) {
        return new CommonResult(4444,"按客戶自定义,global handlerException----2");
    }
}

2.2.2.RateLimitController

@RestController
public class RateLimitController {
	...
  /**
   * 客户自定义限流处理逻辑
   * @author liqb
   * @date 2023-05-26 22:42
   * @return
   */
  @GetMapping("/rateLimit/customerBlockHandler")
  @SentinelResource(value = "customerBlockHandler",
          blockHandlerClass = CustomerBlockHandler.class, // <-------- 自定义限流处理类
          blockHandler = "handlerException02") // <-----------
  public CommonResult customerBlockHandler() {
      return new CommonResult(200,"按客戶自定义",new Payment(2020L,"serial003"));
  }
}

2.2.3.Sentinel控制台配置

在这里插入图片描述

启动微服务后先调用一次 - http://localhost:8401/rateLimit/customerBlockHandler。

然后,多次快速刷新http://localhost:8401/rateLimit/customerBlockHandler。

刷新后,我们自定义兜底方法的字符串信息就返回到前端。

3.SentinelResource配置(下)

3.1.@SentinelResource 注解

注意:注解方式埋点不支持 private 方法。 官网

@SentinelResource 用于定义资源,并提供可选的异常处理和 fallback 配置项。** @SentinelResource** 注解包含以下属性:

  • value:资源名称,必需项(不能为空)
  • entryType:entry 类型,可选项(默认为 EntryType.OUT)
  • blockHandler / blockHandlerClass: **blockHandler **对应处理 **BlockException **的函数名称,可选项。**blockHandler **函数访问范围需要是 public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException。**blockHandler **函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 **blockHandlerClass **为对应的类的 **Class **对象,注意对应的函数必需为 **static **函数,否则无法解析。
  • fallback /fallbackClassfallback 函数名称,可选项,用于在抛出异常的时候提供 **fallback **处理逻辑。**fallback **函数可以针对所有类型的异常(除了exceptionsToIgnore里面排除掉的异常类型)进行处理。**fallback **函数签名和位置要求:
    • 返回值类型必须与原函数返回值类型一致;
    • 方法参数列表需要和原函数一致,或者可以额外多一个 **Throwable **类型的参数用于接收对应的异常。
    • fallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。
  • defaultFallback(since 1.6.0):默认的 fallback 函数名称,可选项,通常用于通用的 **fallback **逻辑(即可以用于很多服务或方法)。默认 fallback 函数可以针对所有类型的异常(除了exceptionsToIgnore里面排除掉的异常类型)进行处理。若同时配置了 **fallback **和 defaultFallback,则只有 **fallback **会生效。**defaultFallback **函数签名要求:
    • 返回值类型必须与原函数返回值类型一致;
    • 方法参数列表需要为空,或者可以额外多一个 **Throwable **类型的参数用于接收对应的异常。
    • defaultFallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 **static **函数,否则无法解析。
  • exceptionsToIgnore(since 1.6.0):用于指定哪些异常被排除掉,不会计入异常统计中,也不会进入 **fallback **逻辑中,而是会原样抛出。

3.2.Sentinel主要有三个核心Api:

  1. SphU定义资源
  2. Tracer定义统计
  3. ContextUtil定义了上下文

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

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

相关文章

2023-05-26:golang关于垃圾回收和析构函数的选择题,多数人会选错。

2023-05-26&#xff1a;golang关于垃圾回收和析构的选择题&#xff0c;代码如下&#xff1a; package mainimport ("fmt""runtime""time" )type ListNode struct {Val intNext *ListNode }func main0() {a : &ListNode{Val: 1}b : &Li…

使用Jmeter进行http接口性能测试

在进行网页或应用程序后台接口开发时&#xff0c;一般要及时测试开发的接口能否正确接收和返回数据&#xff0c;对于单次测试&#xff0c;Postman插件是个不错的Http请求模拟工具。 但是Postman只能模拟单客户端的单次请求&#xff0c;而对于模拟多用户并发等性能测试&#xf…

Linux入门笔记

Linux 1.概述 2.命令 1.常用命令 新建文件 touch 新建目录 mkdir Linux命令格式⭐️ 选项可以对命令具体控制 2.文件目录操作 1.ls ll命令用的很多 显示出非隐藏文件的详细信息 2.cd ~表示当前用户目录&#xff0c;如root用户目录 \表示根目录 3.查看命令 1.cat查看命令 -n…

【Python爬虫项目实战四】Chatgpt国内接口分享第一期

目录 🍇前言接口一接口二(免费学习测试 wuguokai)接口三(AI文本工具站)🍇前言 前几次分享的py接口,由于不经常维护导致你们下载的时候已经失效了,为了回馈粉丝,昨晚我想实在不行我就弄个接口出来吧,我自己维护,有问题咱们就在评论下方留言,我及时做更新处理就可…

树形结构的表设计与Java接口实现

文章目录 1、开发需求中的树形结构2、表结构设计3、接口实现代码模型类与接口定义Mapper层开发 1、开发需求中的树形结构 树形结构在日常开发中很常见&#xff0c;如&#xff1a; 再比如&#xff1a; 还有&#xff1a; 2、表结构设计 这种树形结构&#xff0c;其 核心字段为p…

【自制C++深度学习推理框架】计算图的设计思路

计算图的设计思路 什么是计算图 在深度学习推理框架中&#xff0c;计算图是一种数据结构&#xff0c;它由算子节点和数据节点组成&#xff0c;在该图中前向传播时数据从输入节点开始流动&#xff0c;经过一层层的计算后输出到输出节点&#xff0c;表示深度学习模型的计算过程…

Unity Shader variants (shader 变体)

官方地址 https://docs.unity3d.com/cn/2022.2/Manual/SL-MultipleProgramVariants.html 教程可以看这里 https://www.jianshu.com/p/48ad75f0b4b9 https://www.jianshu.com/p/3e6b84317097 变种用我自己的理解就是 能用程序控制的shader 举个例子 这里声明了 a b c d 四个变…

数据结构与算法03:栈

目录 什么是栈&#xff1f; 栈在函数调用中的应用 栈的应用&#xff1a;如何实现浏览器的前进和后退功能&#xff1f; 每日一练&#xff1a;左右括号匹配 什么是栈&#xff1f; 简单地说&#xff0c;先进后出&#xff0c;后进先出的数据结构就是栈&#xff0c;可以理解为一…

面试题:什么是 TCP/IP?

目录标题 什么是 TCP/IP?1) 网络接口层:2) 网络层:3) 传输层:4) 应用层: 2.数据包3.网络接口层4.网络层1) IP:2)地址解析协议 ARP3)子网 5 传输层1&#xff09;UDP&#xff1a;2&#xff09;TCP&#xff1a; 6 应用层运行在TCP协议上的协议&#xff1a;运行在UDP协议上的协议&…

大模型即将改变世界,百度先上牌桌

“未来&#xff0c;所有的应用都将基于大模型来开发&#xff0c;每一个行业都应该有属于自己的大模型&#xff0c;大模型会深度融合到实体经济当中去。” 作者|思杭 斗斗 编辑|皮爷 出品|产业家 “大模型即将改变世界。”5月26日&#xff0c;李彦宏在中关村论坛说道。 而…

ESP32CAM开发板记录

忘记过去&#xff0c;超越自己 ❤️ 博客主页 单片机菜鸟哥&#xff0c;一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-05-26 ❤️❤️ 本篇更新记录 2023-05-26 ❤️&#x1f389; 欢迎关注 &#x1f50e;点赞 &#x1f44d;收藏 ⭐️留言&#x1f4dd;&#x1f64…

【问题小记】解决Linux下php-fpm进程过多耗尽内存问题

最近一段时间&#xff0c;发现经常性的服务器内存耗尽&#xff0c;导致mysql服务down掉&#xff0c;一开始以为是mysql跑的太久占用较多内存&#xff0c;后来认真排查了一下原来是是PHP-FPM进程过多导致的。 今天一看内存又达到了82%&#xff0c;预计不会太久服务又会挂掉&…

深入探索: 对象构造的隐藏功能与技巧

&#x1f9d1;‍&#x1f4bb;CSDN主页&#xff1a;夏志121的主页 &#x1f4cb;专栏地址&#xff1a;Java基础进阶核心技术专栏 目录 &#x1f383; 一、重载 &#x1f384; 二、默认字段初始化 &#x1f386; 三、无参数的构造器 ✨ 四、显式字段初始化 &#x1f38a; 五…

Vue(路由插件)

一、介绍路由 1. 路由就是一组key-value的对关系&#xff0c;多个路由需要经过路由器进行管理 2. 主要应用在SPA&#xff08;单页面应用&#xff09; 在一个页面展示功能之间的跳转 特点&#xff1a; 当跳转时候不进行页面刷新路径随着变化展示区变化但是不开启新的页签 …

总结丨SGAT单基因关联分析工具,一文上手使用

SGAT是一个免费开源的单基因分析工具&#xff0c;基于Linux系统实现自动化批量处理&#xff0c;能够快速准确的完成单基因和表型的关联分析&#xff0c;只需要输入基因型和表型原始数据&#xff0c;即可计算出显著关联的SNP位点&#xff0c;并自动生成结果报告。 前段时间陆续的…

YOLOv5白皮书-第Y4周:common.py文件解读

目录 0.导入需要的包和基本配置1.基本组件1.1 autopad1.2 Conv1.3 Focus1.4 Bottleneck1.5 BottleneckCSP1.6 C31.7 SPP1.8 Concat1.9 Contract、Expand 2.重要类2.1 非极大值抑制&#xff08;NMS&#xff09;2.2 AutoShape2.3 Detections2.4 Classify &#x1f368; 本文为&am…

【头歌实训】【基于 Logisim 的 RISC-V 处理器设计 · 终】

真的恶心&#xff0c;我哭死 目录 前言 一、说明 1、参考 2、建议 二、处理器设计 三、Control器件设计 1、加速经常性事件&#xff0c;提高效率 2、控制信号设置 1.RegWEn 2.IMMSel 3.BSel 4.ALUSel & WBSel 5.MemWEn 6.PCSel & ASel 7.ALUB 总结…

【C语言】标准库(头文件、静态库、动态库),windows与Linux平台下的常用C语言标准库

一、Introduction1.1 C语言标准库1.2 历代C语言标准1.3 主流C语言编译器 二、C语言标准库2.1 常用标准头文件2.2 常用标准静态库 三、windows平台四、Linux平台五、常用头文件功能速览5.1 通用常用头文件01. stdio.h——标准输入输出02. stdlib.h——内存管理与分配、随机数、字…

Git常用命令reset和revert

Git常用命令reset和revert 1、reset 用于回退版本&#xff0c;可以指定退回某一次提交的版本。 checkout 可以撤销工作区的文件&#xff0c;reset 可以撤销工作区/暂存区的文件。 reset 和 checkout 可以作用于 commit 或者文件&#xff0c;revert 只能作用于 commit。 命…

为什么 String#equals 方法在做比较时没有使用 hashCode

一个疑问的引入 我之前出于优化常数项时间的考虑&#xff0c;想当然的认为 String#equals 会事先使用 hashCode 进行过滤 我想像中的算法是这样的 当两个 hashCode 不等时&#xff0c;直接返回 false&#xff08;对 hash 而言&#xff0c;相同的输入会得到相同的输出&#x…