SentinelResource配置

这篇具有很好参考价值的文章主要介绍了SentinelResource配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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.配置流控规则

配置步骤

SentinelResource配置

图形配置和代码关系

表示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控制台配置

SentinelResource配置

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控制台配置

SentinelResource配置

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

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

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

3.SentinelResource配置(下)

3.1.@SentinelResource 注解

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

@SentinelResource 用于定义资源,并提供可选的异常处理和 fallback 配置项。** @SentinelResource** 注解包含以下属性:文章来源地址https://www.toymoban.com/news/detail-466811.html

  • 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定义了上下文

到了这里,关于SentinelResource配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot-静态资源目录的配置

    配置节点:spring.web.resources.static-locations 值为要配置的静态资源存放目录 如: 以上配置中,设置静态资源目录为src/main/resources/test/目录。 假如在test目录下存放文件test.txt,程序启动后,便能通过浏览器访问ip:port/test.txt访问文件。 新建WebMvcConfig类,继承WebMvcConfigurationSupport类

    2024年02月16日
    浏览(38)
  • 如何在nginx中配置静态资源

    ​ 在nginx中配置静态资源首先要保证你的项目是通过nginx来访问网关请求请求的!,因为静态资源是保存在nginx中的,可以大大的减少运行速度! ​ 首先,我们需要将静态资源导入到nginx中 譬如:你现在有一个静态资源的文件夹!包含你项目的所有静态资源,将其放入到ngi

    2024年02月16日
    浏览(49)
  • Spring Boot 配置静态资源路径

    在Spring Boot 2.7.2版本中,查看默认静态资源路径,在 WebProperties.class 中如下 可以看到默认资源路径有4个。 使用 Spring Initializr 新建Spring Boot项目,自带 static 目录,直接将前端资源文件放到该目录下,启动项目,访问 http://localhost:端口号/资源目录/名称.html 即可; 例如,有一个

    2023年04月15日
    浏览(34)
  • Nginx(动静分离、分配缓冲区、资源缓存、防盗链、资源压缩、IP黑白名单、大文件传输配置、跨域配置、高可用、性能优化)

    首先通过SpringBoot+Freemarker快速搭建一个WEB项目:springboot-web-nginx,然后在该项目中,创建一个IndexNginxController.java文件,逻辑如下: index.ftl页面 从响应中获取了port输出 nginx.conf配置文件修改 至此,所有的前提工作准备就绪,紧接着再启动Nginx,然后再启动两个web服务,第一个

    2024年02月09日
    浏览(40)
  • 十七、Docker之Cgroup资源配置

    其实在日常的工作中,我们一般都没有对docker容器进行资源限制,也就是默认情况下,可以使用宿主机的所有资源。但是如果你运行的服务有问题,就有可能对宿主机和宿主机上的其他业务造成影响,这还是有一定的风险。那么本文会给大家介绍一下如何对容器进行资源配置

    2024年02月16日
    浏览(46)
  • k8s---配置资源管理

    目录 内容预知 secret资源配置 secert的几种模式 pod如何来引用secret 陈述式创建secret 声明式+base64编码配置secret 将secret用vlumes的方式挂载到pod中 传参的方式将环境变量导入pod 如何通过secret加密方式获取仓库密码 configmap的资源配置 陈述式创建configmap资源配置 声明式配置configma

    2024年01月21日
    浏览(55)
  • k8s配置资源管理

    Secret Configmap Secret :保存密码,token,敏感的k8s资源 这类数据可以存放在镜像当中,但是防止secret当中可以更方便控制,减少暴露的风险 保存加密的信息 Docker-registry: 存储docker仓库认证信息,以及docker组件认证成功(私有) Generic: 是secret的默认模式,opaque base64加密编码的

    2024年01月21日
    浏览(47)
  • k8s- 配置资源管理

    配置资源管理 //Secret Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险。 Secret 有四种类型:  ●kubernetes.io/service-account-token:由 Kubernetes 自动创建,

    2024年02月16日
    浏览(44)
  • Hive调优之计算资源配置(一)

    计算资源的调整主要包括Yarn和MR。 1、Yarn配置说明   需要调整的Yarn参数均与CPU、内存等资源有关,核心配置参数如下 (1)yarn.nodemanager.resource.memory-mb   该参数的含义是,一个NodeManager节点分配给Container使用的内存。该参数的配置,取决于NodeManager所在节点的总内存容量

    2024年02月16日
    浏览(34)
  • 【Kubernetes资源篇】ConfigMap配置管理中心详解

    1、ConfigMap配置中心简介 官方中文参考文档: ConfigMap是API对象,用于存放明文(非机密性)数据保存到键值对中,可以使用环境变量、命令行参数或者存储卷方式应用到Pod中,ConfigMap相当于Pod中程序的配置文件,通过修改ConfigMap内容来修改程序的配置。 2、ConfigMap局限性 ConfigM

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包