SpringCloud Alibaba_Sentinel实现熔断与限流

本文介绍了如何在SpringCloud中使用Sentinel实现服务的熔断和限流。内容包括Sentinel的安装与配置,流控规则的设定,如基于QPS、线程数的限流模式,以及降级规则中的RT、异常比例和异常数策略。此外,文章还讨论了热点key限流、服务熔断集成Ribbon和OpenFeign的实现,并提到了规则持久化到Nacos的重要性。
摘要由CSDN通过智能技术生成

安装Sentinel

sentinel组件由两个部分组成:

  • 核心库(Java客户端),不依赖任何框架和库,能够运行于Java运行时环境,同时对SpringCloud等框架也有较好的支持。
  • 控制台(DashBoard)基于SpringBoot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器

下载

https://github.com/alibaba/Sentinel/releases

运行命令

java -jar sentinel-dashboard-1.7.2.jar

注意:8080端口不能被占用

访问sentinel管理界面

http://localhost:8080
账号密码:sentinel

流控规则

基本介绍

在这里插入图片描述

  • 资源名:唯一名称,默认请求路径
  • 针对来源:Sentinel可以针对调用者进行限流,填写微服务名,默认default(不区分来源)
  • 阈值类型/单机阈值
    • QPS(每秒请求数量):当调用该api的QPS达到阈值的时候,进行限流
    • 线程数:当调用该api的线程数达到阈值的时候,进行限流
  • 是否集群:不需要集群
  • 流控模式:
    • 直接:api达到限流条件时,直接限流
      在这里插入图片描述
    • 关联:当关联的资源达到阈值时,就限流自己
      在这里插入图片描述
    • 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)
  • 流控效果
    • 快速失败:直接失败。抛异常
    • Warm up:根据coldfactor(冷加载因子,默认3)的值,从阈值/coldfactor,经过预热时长,才达到设置的QPS阈值
      在这里插入图片描述
      如:秒杀系统在开启瞬间,会有很多流量上来,很可能把系统打死,预热方式就是为了保护系统,可慢慢的把流量放进来,慢慢的把阈值增长到设置的阈值。
    • 排队等待:匀速排队,让请求以匀速通过,阈值类型必须设置为QPS,否则无效
      在这里插入图片描述
      在这里插入图片描述

降级规则

RT

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

异常比例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

异常数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

热点key限流

配置

在这里插入图片描述

@GetMapping("/testHotKey")
@SentinelResource(value = "testHotKey")
public String testHotKey(@RequestParam(value = "p1",required = false) String p1,
                         @RequestParam(value = "p2",required = false) String p2)
{
   
    //int age = 10/0;
    return "------testHotKey";
}

返回异常不友好界面,blocked by sentinel

@GetMapping("/testHotKey")
@SentinelResource(value = "testHotKey",blockHandler = "deal_testHotKey")
public String testHotKey(@RequestParam(value = "p1",required = false) String p1,
                         @RequestParam(value = "p2",required = false) String p2)
{
   
    //int age = 10/0;
    return "------testHotKey";
}
public String deal_testHotKey (String p1, String p2, BlockException exception)
{
   
    return "------deal_testHotKey,o(╥﹏╥)o";  //sentinel系统默认的提示:Blocked by Sentinel (flow limiting)
    }

自定义blockHandler,处理异常。

参数例外项

假如当p1的值等于5时,它的阈值可以达到200:
在这里插入图片描述
参数类型仅限于基本数据类型或者String

系统规则

在这里插入图片描述
在这里插入图片描述
系统配置管辖太宽泛,可能引起全局范围内的问题,不使用,危险。

@SentinelResource

按照资源名称+流控规则限流+后续处理

在这里插入图片描述

@GetMapping("/byResource")
@SentinelResource(value <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值