CloudCurrentLimit限流控制工具

联合创作 · 2023-09-29

CloudCurrentLimit 基于 redis 的 Lua 脚本实现对高并发下的限流控制,可极大降低系统的接入成本,对高并发系统进行限流达到保护系统的目的。

开箱即用

引入maven,配置文件,注解一打,1分钟集成好限流,真正的做到了开箱即用。

使用场景:

无需独立启动第三方服务,以jar包方式和项目一起启动,不存在第三方服务挂掉的风险,对整个集群限流

如果我们的系统有高并发限流场景,自己临时写可能会有bug,引入现在市面上的限流工具,要么需要单独启动服务,要么配置繁琐,有没有低成本高效接入的限流组件呢?

显而易见CloudCurrentLimit正是很好符合该需求的选择,只需要简单的配置即可达到限流效果.

springboot集成版本支持 2.2.2.RELEASE<=Version<3.x

实现了集群状态下的限流,限流对整个集群生效

 1.引入maven依赖

<dependency>
    <groupId>net.oschina.likaixuan</groupId>
    <artifactId>cloud-limit-spring-boot-starter</artifactId>
    <version>2.2.2.RELEASE</version>
</dependency>

2. application.yml中开启限流配置

spring:
  redis:
    host: localhost
    database: 0
    lettuce:
      pool:
        max-active: 10
        max-idle: 10
        max-wait: -1ms
      shutdown-timeout: 100ms
    password:
    port: 6379
cloud:
  limit:
    scan-package: com/example/demoplus/controller  #项目中的controller包
    type: TOKEN #目前算法只支持令牌桶算法,写死TOKEN就行

3.Controller 类上打上注解

@CloudLimitAnnottion(
limitCount = 2, #每秒限流请求次数,默认50
limitMsg = "你被限流了" #支持配置自定义限流提示语句,可不配置,不配置默认提示限流【触发限流了】
)

举个栗子

输入图片说明

4.该步骤一般项目中都有自己的全局捕获异常,只需要捕获RuntimeException即可,当然也可以捕获限流的异常类CloudLimitException

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler(value = CloudLimitException.class)
    public R handler(CloudLimitException e){
        return R.error(e.getMessage());
    }
}

如果项目启动有限流相关日志输出,则说明限流生效,如下图

输入图片说明

浏览 4
点赞
评论
收藏
分享

手机扫一扫分享

编辑
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑
举报