当前位置: 首页 > news >正文

Sentinel实现限流和熔断降级

文章:关于sentinel的介绍已经非常详细了,直接看它就可以了,这边只是做一个简单的学习。

自己根据上面的链接配置好sentinel.

前面我们学习过通过feign + resilience4j 实现限流和服务的熔断降级

feign + resilience4j前情回顾:

 需要的依赖:

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId></dependency>

yml配置:

spring:cloud:openfeign:circuit breaker:enabled: true

通过@FeignClient就可以实现服务调用和熔断降级 

现在我们学习一个更加灵活的限流和熔断降级方式:Sentinel 

首先

  1. 下载好sentinel控制台的jar包
  2. 运行jar包
  3. 访问127.0.0.1:8080

应用引入依赖:

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--sentinel限流,熔断降级--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>

给应用配置好sentinel

spring:cloud:sentinel:enabled: true# 开启对sentinel看板的饥饿式加载。sentinel默认是懒加载机制,只有访问过一次的资源才会被监控,通过关闭懒加载,在项目启动时就连接sentinel控制台eager: truelog:#日志输出地址dir: logs/sentinel transport:#跟控制台交流的端口port: 8719# sentinel看板的地址dashboard: localhost:8080
feign:sentinel:enabled: true

我们看到配置里面配置了:

feign:
  sentinel:
    enabled: true 

我们让openfeign集成Sentinel熔断器,,所以同样通过@FeignClient也可以实现熔断降级。在熔断器Sentinel下@FeignClient的使用与熔断器resilience4并没有什么太大差别,同样可以实现服务降级,OpenFeign 本身只是一个声明式的 HTTP 客户端,它不包含熔断器的实现,它只提供了与熔断器集成的接口,所以可以注入不同的熔断器来实现@FeignClient的熔断降级

sentinel的使用就是一个@SentinelResource注解的使用

@SentinelResource的属性

  • value:作用指定资源名称,必填
  • entryType:entry类型,标记流量的方向,指明是出口流量,还是入口流量;取值 IN/OUT ,默认是OUT。非必填
  • blockHandler:处理BlockException的函数名称,函数要求为
    必须是public
    返回类型与原方法一致
    参数类型需要和原方法相匹配,并在最后加上BlockException类型的参数
    默认需和原方法在同一个类中,如果希望使用其他类的函数,可配置blockHandlerClass,并指定blockHandlerClass里面的方法
  • blockHandlerClass:存放blockHandler的类。对应的处理函数必须static修饰,否则无法解析。函数要求为:
    必须是public
    返回类型与原方法一致
    参数类型需要和原方法相匹配,并在最后加上BlockException类型的参数
  • fallback:用于在抛出异常的时候提供fallback处理逻辑。fallback函数可以针对所有类型的异常(除了execptionsToIgnore 里面排除掉的异常类型)进行处理,函数要求为:
    返回类型与原方法一致
    参数类型需要和原方法相匹配,Sentinel 1.6版本之后,也可在方法最后加上Throwable类型的参数
    默认需和原方法在同一个类中,若希望使用其他类的函数,可配置fallbackClass,并指定fallbackClass里面的方法
  • fallbackClass:存放fallback的类。对应的处理函数必须static修饰,否则无法解析,其他要求:同fallback。
  • defaultFallback:用于通用的 fallback 逻辑。默认fallback函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。若同时配置了 fallback 和 defaultFallback,以fallback为准。函数要求:
    返回类型与原方法一致
    方法参数列表为空,或者有一个Throwable类型的参数
    默认需要和原方法在同一个类中,若希望使用其他类的函数,可配置fallbackclass,并指定fallbackClass里面的方法。
  • exceptionsToIgnore:指定排除掉哪些异常。排除的异常不会计入异常统计,也不会进入fallback逻辑,而是原样抛出
  • exceptionsToTrace:需要trace的异常

这边重点讲一下blockHandler和 fallback属性:

blockHandler:就是对我们手动在控制台添加的流空规则、熔断规则、热点规则、系统规则等的处理,只要超过了规则阈值就会执行blockHandler指定的的方法,如果指定的方法与@SentinelResource不在同一个类,blockHandlerClass需要指定blockHandler指定的方法的存放类,否则可省

fallback:就是被@SentinelResource注释的接口发生异常时会调用fallback指定的方法,fallbackClass就是存放fallback的类

简单实现使用一下@SentinelResource注解:

    @RequestMapping("/hello")@SentinelResource(value = "hello",blockHandler = "getNameBlockHandler",fallback = "helloFallback")public String hello(){throw new RuntimeException("consumer error");}public static String helloFallback(String name, Throwable e){return "接口出错了,请稍后重试";}@RequestMapping("/get")@SentinelResource(value = "getName",blockHandler = "getNameBlockHandler")public String get(String name){return name;}public static String getNameBlockHandler(String name, BlockException e){return "服务繁忙,请稍后重试";}

添加一个流控规则:

通过Jmeter来进行压测(使用Jmeter自己看:jemter的安装与使用),让1秒内进行4次请求看一下结果: 

 

 

http://www.lryc.cn/news/603168.html

相关文章:

  • 四、Linux核心工具:Vim, 文件链接与SSH
  • 整车应用------后电驱总成
  • Java 大视界 -- Java 大数据在智能教育学习社区知识图谱构建与知识传播分析中的应用(370)
  • centos服务器安装minio
  • React 中获取当前路由信息
  • 低空经济应用-无人机拉格朗日粒子追踪技术
  • 界面控件Telerik UI for WPF 2025 Q2亮点 - 重要组件全新升级
  • SeeMoE:从零开始实现一个MoE视觉语言模型
  • CentOS Nginx 1.13.9 部署文档
  • 14 - 大语言模型 — 抽取式问答系统 “成长记”:靠 BERT 学本事,从文本里精准 “揪” 答案的全过程(呆瓜版-1号)
  • 分布式链路追踪详解
  • 【C++】第十九节—一文万字详解 | AVL树实现
  • 【C++篇】“内存泄露”的宝藏手段:智能指针
  • 【腾讯云】EdgeOne免费版实现网站加速与安全防护
  • thingsboard 自定义动作JS编程
  • uniapp 如果进入页面输入框自动聚焦,此时快速返回页面或者跳转到下一个页面,输入法顶上来的页面出现半屏的黑屏问题。
  • 在 Ubuntu 下测试单目与双目相机
  • 影翎Antigravity将发布全球首款全景无人机,8月开启公测招募
  • python案例:基于python 神经网络cnn和LDA主题分析的旅游景点满意度分析
  • JAVA第五学:方法的使用
  • 实时画面回传的开发复盘
  • 【LeetCode 热题 100】34. 在排序数组中查找元素的第一个和最后一个位置——二分查找
  • Linux之网络部分-应用层协议 HTTP
  • Objective-c 初阶——异常处理(try-catch)
  • 第2章算法分析:大O符号的定义和性质
  • 第17章——多元函数积分学的预备知识
  • golang--通道和锁
  • springboot集成deepseek
  • c++: 尾置返回类型(Trailing Return Type)
  • 【MySQL基础篇】:MySQL常用数据类型的选择逻辑与正确使用