Sentinel之力:解锁@SentinelResource注解的神奇威力

欢迎来到我的博客,代码的世界里,每一行都是一个故事


在这里插入图片描述

Sentinel之力:解锁@SentinelResource注解的神奇威力

    • 前言
    • @SentinelResource注解基础:数字法术的咒语
      • `@SentinelResource` 注解的基本概念和作用:
      • 在方法上添加 `@SentinelResource` 注解:
      • 示例解释:
    • 注解的属性与配置:数字巫师的特殊咒文
      • 1. `blockHandler` 属性:
      • 2. `fallback` 属性:
      • 3. `exceptions` 属性:
      • 4. 其他属性:

前言

在数字守护的世界中,有一种魔法符文叫做@SentinelResource注解,它就像是一位数字巫师,能够为微服务系统创造出安全稳定的法术屏障。这个注解有点像是系统的“保护伞”,为每一个被标记的方法赋予了特殊的能力。在本文中,我们将揭示这个注解的神奇威力,让你深入领略Sentinel注解之美的魔法世界。

@SentinelResource注解基础:数字法术的咒语

@SentinelResource 注解是Sentinel中用于标记资源的注解,它用于标识受保护的资源(例如方法、接口等),以便通过流控规则进行管理。以下是关于 @SentinelResource 注解的基本概念、作用以及如何在方法上添加注解的解释,以及一个简单示例演示注解在流控中的最基本用法。

@SentinelResource 注解的基本概念和作用:

  1. 基本概念: @SentinelResource 是Sentinel提供的用于定义资源的注解,它可以标记在方法上,表示该方法是一个需要受到流控保护的资源。

  2. 作用: 通过该注解,可以在方法级别定义流控规则、熔断规则等,实现对资源的访问控制和保护,确保系统在高并发或异常情况下的稳定性。

在方法上添加 @SentinelResource 注解:

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;public class ExampleService {@SentinelResource(value = "exampleMethod", blockHandler = "handleFlowControl")public void exampleMethod() {// 实际业务逻辑System.out.println("执行业务逻辑");}// 处理流控的方法public void handleFlowControl(BlockException ex) {// 流控时的处理逻辑,例如返回特定的错误信息或执行降级策略System.out.println("流控处理逻辑");}
}

示例解释:

  • @SentinelResource(value = "exampleMethod", blockHandler = "handleFlowControl"):这行代码表示 exampleMethod 方法是一个受到 Sentinel 保护的资源,value 参数指定资源名称,blockHandler 参数指定处理流控的方法。

  • public void exampleMethod():这是一个示例方法,包含了实际的业务逻辑。

  • public void handleFlowControl(BlockException ex):这是一个处理流控的方法,当 exampleMethod 方法触发流控时,会调用该方法进行处理。

通过这个简单的示例,演示了如何在方法上使用 @SentinelResource 注解,定义受到流控保护的资源,并指定流控处理方法。在实际应用中,可以根据业务需求在 @SentinelResource 注解中添加不同的参数,如指定降级方法、指定热点参数等,以更精细地管理和保护系统资源。

注解的属性与配置:数字巫师的特殊咒文

@SentinelResource 注解提供了一些重要的属性,包括 blockHandlerfallbackexceptions 等,用于配置在资源发生异常或流控时的处理方式。以下是对这些属性的详细配置说明,帮助读者了解如何根据不同场景配置 @SentinelResource 注解的属性。

1. blockHandler 属性:

  • 作用: 用于指定当资源被流控时,触发的处理方法。

  • 配置说明: 可以指定一个方法名,该方法需要满足以下条件:

    • 方法返回类型与原方法一致。
    • 方法参数可以为空,也可以接受 BlockException 类型的参数。
  • 示例:

    @SentinelResource(value = "exampleMethod", blockHandler = "handleFlowControl")
    public void exampleMethod() {// 实际业务逻辑
    }// 处理流控的方法
    public void handleFlowControl(BlockException ex) {// 流控时的处理逻辑
    }
    

2. fallback 属性:

  • 作用: 用于指定当资源发生异常时,触发的处理方法。

  • 配置说明: 可以指定一个方法名,该方法需要满足以下条件:

    • 方法返回类型与原方法一致。
    • 方法参数可以为空,也可以接受原方法的参数,以及 Throwable 类型的参数。
  • 示例:

    @SentinelResource(value = "exampleMethod", fallback = "handleFallback")
    public void exampleMethod() {// 实际业务逻辑
    }// 处理异常的方法
    public void handleFallback(Throwable throwable) {// 异常时的处理逻辑
    }
    

3. exceptions 属性:

  • 作用: 用于指定需要统计的异常类型,可以同时统计多个异常。

  • 配置说明: 可以指定一个异常类型的数组。

  • 示例:

    @SentinelResource(value = "exampleMethod", exceptions = {ArithmeticException.class, NullPointerException.class})
    public void exampleMethod() {// 实际业务逻辑
    }
    

4. 其他属性:

  • value 属性: 用于指定资源名称,建议设置一个具有业务含义的名字。

  • entryType 属性: 用于指定统计的维度,有 EntryType.IN(代表进入调用)和 EntryType.OUT(代表退出调用)两种选择。

  • resourceType 属性: 用于指定资源的类型,默认为 Constants.RESOURCE_DEFAULT_NAME

  • blockHandlerClassfallbackClass 属性: 用于指定处理方法所在的类,当类中的方法被指定时,会优先使用。

  • 其他属性详见文档: Sentinel 提供了其他一些配置属性,根据具体需求可以查阅 Sentinel 官方文档进行了解。

通过正确配置 @SentinelResource 注解的属性,可以实现对不同异常和流控情况的灵活处理。在实际应用中,根据业务场景的不同,选择适当的属性配置,确保系统在异常和流量控制的情况下能够以合适的方式进行处理。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 入门基础知识(一)—— Linux的基本使用

Linux 入门基础知识 一、Linux的基本使用和配置1.1、终端1.2、消耗内存1.3、运行级别1.6、登录前欢迎语1.5、登录后欢迎语1.6、shell1.7、ps aux1.8、设置主机名1.9、whoami和who am i1.10、命令提示符 二、Linux执行命令的过程详解和命令类型2.1、命令执行2.2、hash缓存表2.3、…

InputNumber数字输入框(antd-design组件库)简单使用

1.InputNumber数字输入框 通过鼠标或键盘,输入范围内的数值。 2.何时使用 当需要获取标准数值时。 组件代码来自: 数字输入框 InputNumber - Ant Design 3.本地验证前的准备 参考文章【react项目antd组件-demo:hello-world react项目antd组件-demo:hello…

浏览器内存泄漏排查指南

1、setTimeout执行原理 使用setInterval/setTimeOut遇到的坑 - 掘金 2、Chrome自带的Performance工具 当我们怀疑页面发生了内存泄漏的时候,可以先用Performance录制一段时间内页面的内存变化。 点击开始录制执行可能引起内存泄漏的操作点击停止录制 如果录制结束…

springboot整合mqtt实现消息订阅和推送

前言 mica-mqtt-client-spring-boot-starter是一个基于Spring Boot的MQTT客户端启动器,它集成了mica-mqtt客户端,提供了在Spring Boot应用程序中使用MQTT协议进行消息通信的能力。以下是关于mica-mqtt-client-spring-boot-starter的简介: 特…

dvwa靶场xss储存型

xss储存型 xxs储存型lowmessage框插入恶意代码name栏插入恶意代码 medium绕过方法 high xxs储存型 攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。产生层面:后端漏洞特征:持久性的、前端执行、储存在后端数据…

03 Redis之命令(基本命令+Key命令+String型Value命令与应用场景)

Redis 根据命令所操作对象的不同,可以分为三大类:对 Redis 进行基础性操作的命令,对 Key 的操作命令,对 Value 的操作命令。 3.1 Redis 基本命令 一些可选项对大小写敏感, 所以应尽量将redis的所有命令大写输入 首先通过 redis-…

【C项目】顺序表

简介:本系列博客为C项目系列内容,通过代码来具体实现某个经典简单项目 适宜人群:已大体了解C语法同学 作者留言:本博客相关内容如需转载请注明出处,本人学疏才浅,难免存在些许错误,望留言指正 作…

初识webpack(一)概念、入口配置、输出配置、loader等

目录 (一)概念 webpack的依赖图 (二)webpack的基本使用 (三)webpack的配置文件 1.入口(entry)配置 2.输出(output)配置 (三)loader 1.css文件处理 (1)安装css-loader和style-loader (2)在webpack.config.js中配置loader 2.less文件处理 3.postcss的使用 (1)安装…

python爬虫之豆瓣首页图片爬取

网址:https://movie.douban.com/ import requests from lxml import etree import re url https://movie.douban.com headers {User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/5…

代理IP在游戏中的作用有哪些?

游戏代理IP的作用是什么?IP代理软件相当于连接客户端和虚拟服务器的软件“中转站”,在我们向远程服务器提出需求后,代理服务器首先获得用户的请求,然后将服务请求转移到远程服务器,然后将远程服务器反馈的结果转移到客…

redis 极简分布式锁实现

写在前面 工作中遇到,整理 reids 做简单分布式锁的思考博文适合刚接触 redis 的小伙伴理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是…

Flutter 开发3:创建第一个Flutter应用

Step 1: 安装Flutter 1.1 下载Flutter SDK 首先,你需要访问Flutter官方网站下载最新的Flutter SDK。选择适合你操作系统的安装包。 $ cd ~/development $ unzip ~/Downloads/flutter_macos_2.2.3-stable.zip1.2 更新环境变量 接下来,你需要将Flutter…

Git 介绍 与 配置

Git 介绍 Git是一个分布式版本控制系统,用于跟踪文件的更改和协作开发。它可以管理项目的版本历史记录,并允许多个开发者在同一时间进行并行开发。 解决上图产生的问题就出现了git 分布式版本控制系统 看下图 Git 配置 Git的基本配置包括用户名和电子邮…

人脸识别 FaceNet人脸识别(一种人脸识别与聚类的统一嵌入表示)

人脸识别 FaceNet人脸识别(一种人脸识别与聚类的统一嵌入表示) FaceNet的简介Facenet的实现思路训练部分 FaceNet的简介 Facenet的实现思路 import torch.nn as nndef conv_bn(inp, oup, stride 1):return nn.Sequential(nn.Conv2d(inp, oup, 3, stride…

Netty源码二:服务端创建NioEventLoopGroup

示例 还是拿之前启动源码的示例,来分析NioEventLoopGroup源码 NioEventLoopGroup构造函数 这里能看到会调到父类的MultiThread EventLoopGroup的构造方法 MultiThreadEventLoopGroup 这里我们能看到,如果传入的线程数目为0,那么就会设置2倍…

JDBC 结构优化2

JDBC 结构优化2 文章目录 JDBC 结构优化2结构优化2 - ATM系统(存,取,转,查)1 Service2 事务3 ThreadLocal4 事务的封装 结构优化2 - ATM系统(存,取,转,查) 1 Service 什么是业务? 代表用户完成的一个业务功能,可以由一个或多个DAO的调用组成。软件所提供的一个功…

[NCTF2019]Fake XML cookbook(特详解)

先试了一下弱口令,哈哈习惯了 查看页面源码发现xml function doLogin(){var username $("#username").val();var password $("#password").val();if(username "" || password ""){alert("Please enter the usern…

数据据库八之 视图、触发器、事务

【零】准备数据 【1】创建表 (1)部门表 d_id是部门的编号d_name是部门的名字 # 确保表不存在 drop table if exists department; # 创建表 create table department( d_id int auto_increment primary key, d_name varchar(6) )auto_increment 501 …

腾讯云部署vue+node项目

文章目录 一、安装宝塔二、vue项目部署三、node项目部署 前言: 关于项目部署,一开始也是找了很多资料,费了点时间,所以记录一下。希望能对各位有所帮助。 一、安装宝塔 1.首先在控制台,进入云服务器的终端界面 2.输入命令和密码获取权限,并且安装宝塔界面 yum install -y w…

如何把png改成jpg格式?分享5个好用的方法!

你是否经常遇到需要将PNG格式的图片转换成JPG格式的情况?无论是因为工作需要,还是为了适应不同的平台和设备,格式转换都是我们经常要面对的问题。那么,如何快速、简单地完成这个任务呢?今天,我们就来为你揭…