SpringBoot分布式限流组件零配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qFboLgql-1658487287538)(https://ws3.sinaimg.cn/large/006tNc79gy1g2e0ejmbv0j312s0bsmxv.jpg)]

EasySentinel


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g3Vx7uE5-1658487287538)(https://img.shields.io/badge/build-passing-brightgreen.svg)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D09Jy3VH-1658487287538)(https://img.shields.io/badge/license-Apache%202-blue.svg)]

是一款专门为SpringBoot项目设计的限流组件,利用Redis+lua从而来实现高性能和分布式的能力。使用比较简单。通过半嵌入式的开发即可使用分布式注解。引用使用Redis作为注册中心,所以需要添加redis依赖

SpringBoot2版本之后官方强烈建议以此来替换spring-boot-starter-redis

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

正在Coding

为了有更好的用户体验,控制台的开发已经提上日常。当前项目只有本人维护,欢迎前端或者后端的同学一起来参与

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JPhca1ZM-1658487287539)(https://ws3.sinaimg.cn/large/006tNc79gy1g2e0wi3bpuj31320ihmz8.jpg)]

开始引入依赖

<dependency>
 <groupId>com.github.lxchinesszz</groupId>
    <artifactId>easy-sentinel</artifactId>
    <version>1.0.1-SNAPSHOT</version>
</dependency>

使用案例

只用将需要限制的接口加上@EasySentinel即可实现限流能力

通过Qps设置当前接口的qps,fallback指定限流后的备用方法 。

@RestController
public class WebController {

  @EasySentinel(Qps = 10, fallback = "mock", resourceName = "获取用户名")
  @GetMapping(value = "/user/{name}")
  public String getUser(@PathVariable("name") String userName) {
    System.out.println("process:" + userName);
    return userName;
  }

  public String mock(String userName) {
    System.out.println("Mock::" + userName);
    return "Mock::" + userName;
  }
}

备用方法高级案例

前面只通过fallback实现备用方法的执行,但是平时为了让控制层的代码尽量保证精简,EasySentinel也支持通过工具类的方式来,指定blockHandlerClass处理类的方法blockHandler

@RestController
public class WebController {
  @EasySentinel(resourceName = "获取用户名2", Qps = 1, blockHandler = "fallBack",    `		blockHandlerClass = DefaultLimiterBlockHandler.class)
  @GetMapping(value = "/user1/{name}")
  public String getUser2(@PathVariable("name") String userName) {
    System.out.println("process:" + userName);
    return userName;
  }
}
public class DefaultLimiterBlockHandler {
  public Object fallBack(BlockException block, String userName) {
    return "DefaultLimiterBlockHandler::" + userName + block.getMessage();
  }
}

压力测试

ab -n 14 -c 1 http://127.0.0.1:8889/user/lxchinesszz

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g2KxduH9-1658487287539)(https://ws2.sinaimg.cn/large/006tNc79gy1g2evzcxz9rj311b0hy4qp.jpg)]

创作者

lxchinesszz

  • https://blog.springlearn.cn
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西魏陶渊明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值