问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

SpringCloud整合Sentinel实现API限流

创作时间:
作者:
@小白创作中心

SpringCloud整合Sentinel实现API限流

引用
CSDN
1.
https://blog.csdn.net/TM007_/article/details/137513538

Sentinel是阿里巴巴开源的流量控制组件,能够为微服务提供实时的流量控制、熔断降级、系统负载保护等功能。本文将详细介绍如何在SpringCloud项目中整合Sentinel,并通过具体的代码示例展示如何实现API限流。

前言

在微服务架构中,流量控制是一个非常重要的环节。本文将介绍如何使用Sentinel实现API限流。Sentinel是一个轻量级的流量控制组件,能够帮助我们实现流量控制、熔断降级、系统负载保护等功能。

一、Sentinel下载

  1. 直接下载jar包:到文件下载目录层级打开命令页面
  2. 启动Sentinel:使用java -jar sentinel-dashboard-1.8.7.jar命令启动sentinel。默认端口是8080,如果需要修改端口,可以使用java -jar sentinel-dashboard-1.8.7.jar --server.port=8333命令。
  3. 访问管理页面:访问http://localhost:8333/#/login,默认用户名和密码都是sentinel。

二、SpringCloud整合Sentinel

2.1 引入依赖

在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>

2.2 配置信息

在application.yml文件中添加以下配置:

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8333
        port: 8719
management:
  endpoints:
    web:
      exposure:
        include: "*"

2.3 启动类开启服务发现

在启动类上添加@EnableDiscoveryClient注解,开启服务发现功能。

2.4 测试接口加注解@SentinelResource

在需要限流的接口上添加@SentinelResource注解:

@SentinelResource
@PostMapping(value = "/login")
public BaseResult login(String username, String password) {
    UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
    ...
    return BaseResult.success();
}

三、流控规则

3.1 基本介绍

  • 资源名:唯一名称,默认的请求路径
  • 针对来源:Sentinel可以针对调用者进行限流,填写微服务名称,默认是default
  • 阈值类型/单机阈值
  • QPS:每秒钟的请求数量
  • 线程数:当调用该api的线程数达到阈值的时候,进行限流
  • 是否集群:不需要集群
  • 流控模式:挑默认的看下
  • 直接:api达到限流条件时,直接限流
  • 流控效果
  • 快速失败:直接失败,抛出异常

3.2 添加一个流控规则

限制单机阈值QPS为1:

3.3 注意事项

在添加流控规则的时候,可能会遇到添加失败的场景,可能是由于客户端使用了低版本的fastjson。建议升级fastjson的版本:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.58</version>
</dependency>

3.4 测试接口

设置每秒支持一个请求,快速点击请求即可实现限流测试。

章末

后续将补充熔断、负载的使用,以及搭配OpenFeign使用。

后续补充

一、Sentinel的熔断降级

1.1 替换Hystrix实现熔断降级,将Hystrix的配置项改为false,添加Sentinel的配置并开启。

1.2 熔断规则参数配置:

  • 熔断策略
  • 慢调用比例:根据一定的时间窗口内请求的响应时间超过设定阈值的比例来触发熔断。
  • 异常比例:根据一定的时间窗口内的请求异常比例来触发熔断。
  • 异常数:根据一定的时间窗口内的异常次数来触发熔断。
  • 最大RT:响应时间阈值。
  • 熔断时长:熔断器打开状态的持续时间。
  • 最小请求数:在熔断器进入半开状态之前需要满足的请求数量。
  • 统计时常:用于计算慢调用比例、异常比例和异常数的时间窗口大小。

二、Sentinel的热点规则

新增热点规则的参数:

  • 资源:需要进行限流的具体接口、URL或方法等标识符。
  • 参数索引:控制器方法参数的下标。
  • QPS阈值:一秒内允许通过的请求次数。
  • 热点参数阈值:针对热点参数的具体限流阈值。
  • 统计时长:统计数据的时间窗口大小。

三、总结

限流、熔断、热点等机制共同的特点是在触发预先配置的条件时,执行截断操作,以保护系统免受过载影响。这些机制在代码层面表现为请求拦截,执行指定方法,从而实现对系统的保护。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号