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>
- 1
- 2
- 3
- 4
正在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>
- 1
- 2
- 3
- 4
- 5
使用案例
只用将需要限制的接口加上@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;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
备用方法高级案例
前面只通过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();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
压力测试
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
文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。
原文链接:springlearn.blog.csdn.net/article/details/89521731
- 点赞
- 收藏
- 关注作者
评论(0)