1. 限流注解
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.enums.LimitType;
import java.lang.annotation.*;
/**
* 限流注解
*
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimiter
{
/**
* 限流key
*/
public String key() default Constants.RATE_LIMIT_KEY;
/**
* 限流时间,单位秒
*/
public int time() default 60;
/**
* 限流次数
*/
public int count() default 100;
/**
* 限流类型
*/
public LimitType limitType() default LimitType.IP;
}
2. 限流类型
/**
* 限流类型
*
*/
public enum LimitType
{
/**
* 默认策略全局限流
*/
DEFAULT,
/**
* 根据请求者IP进行限流
*/
IP
}
3. Controller
@RateLimiter(time = 10,count = 5) // 根据请求者IP限流, 接口10秒内限访问5次
/**
* 查询订单列表
*/
@RateLimiter(time = 10,count = 5)
@ApiOperation("查询订单列表")
@GetMapping("/list")
public TableDataInfo list(LsOrder lsOrder)
{
startPage();
List<LsOrder> list = lsOrderService.selectLsOrderList(lsOrder);
return getDataTable(list);
}
4. 测试