# easy-limiter
**Repository Path**: jychan/easy-limiter
## Basic Information
- **Project Name**: easy-limiter
- **Description**: No description available
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-08-12
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## easy-limiter
### 功能介绍
为WEB项目快速支持限流功能,包括接口总请求限流、ip限流。也可以自定义限流规则。
前提:项目须支持spring注解!
### 引用依赖
```
com.yy.tools
easy-limiter
1.0.7
```
---- 引入spring aop相关依赖 ----
spring-boot 可用:
```
org.springframework.boot
spring-boot-starter-aop
```
### 扫描包
注解方式扫包:
`@ComponentScan({"com.yy.tools.limiter"})`
xml方式扫包:
``
### 启动自动代理
``
### 配置限流(快速使用)
我们提供两个快速限流注解
总量限流:`@LimiterQuickTotal`
针对ip限流:`@LimiterQuickIp`(注意,需要方法有`HttpServletRequest`类型参数才生效)
```
@LimiterQuickIp(tps = 5, rejectReturnVal = "{\"msg\":\"ip too often!\",\"code\":\"1506\"}")
@LimiterQuickTotal(tps = 3, rejectReturnVal = "{\"msg\":\"system busy.\",\"code\":\"1506\"}")
public Map testLimit(HttpServletRequest request) {
Map map = new HashMap<>();
map.put("code", "0");
return map;
}
```
属性`tps`表示限流器的tps上限
属性`rejectReturnVal`是当限流器拦截后返回的内容,会根据被限流方法的返回类型自动转换,具体来说是基本类型由字符串直转,其他类型以json->obj方式转换
### 配置限流(高级使用)
```
@Limiters(limiters = {
@Limiter(adapter = LimiterRandomAdapter.class,
rejectReturnVal = "{\"msg\":\"system busy.\",\"code\":\"1506\"}",
keyValues = {@LimiterKV(key = "rate", valDouble = 0.4, type = LimiterKvType.DOUBLE)}),
@Limiter(adapter = LimiterIpAdapter.class,
rejectReturnVal = "{\"msg\":\"ip too often.\",\"code\":\"1506\"}",
keyValues = {
@LimiterKV(key = KEY_RETURN_VAL, valString = "{\"msg\":\"ip too often.....\",\"code\":\"1506\"}", type = LimiterKvType.STRING),
@LimiterKV(key = KEY_TPS, valInt = 3, type = LimiterKvType.INT)})
})
public Map testLimit(HttpServletRequest request, HttpServletResponse response) {
Map map = new HashMap<>();
map.put("code", 0);
return map;
}
```
说明:
用户自定义限流器并实现`com.yy.tools.limiter.base.BaseLimiter`接口,创建bean,如:LimiterRandomAdapter
拦截工具会根据`LimiterRandomAdapter.class`提取限流器bean
根据需要通过`keyValues`传递需要的参数进自定义的限流器
温馨提示:建议自定义限流器时参考`LimiterIpAdapter、LimiterTotalAdapter、LimiterRandomAdapter`的实现
### 发布版本(for开发者)
执行`$ mvn deploy`