com.founder.core.annotation.RateLimit Maven / Gradle / Ivy
package com.founder.core.annotation;
import com.founder.core.model.Mode;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author kl (http://kailing.pub)
* https://gitee.com/kailing/ratelimiter-spring-boot-starter
* @since 2021/3/16
*/
@Target(value = {ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface RateLimit {
//===================== 公共参数 ============================
/**
* 时间窗口限流:偏向控制请求数量,比如每秒请求数量不超过 100,每分钟请求数量不超过 1000,每小时请求数量不超过 10000,每天请求数量不超过 100000。
* 令牌桶限流:偏向控制请求频率,比如最大请求并发不超过 100,且 QPS 限制在一定范围内,比如 QPS 限制在 50。
* @return
*/
Mode mode() default Mode.TIME_WINDOW;
/**
* 时间窗口模式表示每个时间窗口内的请求数量
* 令牌桶模式表示每秒的令牌生产数量
* @return rate
*/
int rate();
/**
* 获取key
* @return keys
*/
String [] keys() default {};
/**
* 限流后的自定义回退后的拒绝逻辑
* @return fallback
*/
String fallbackFunction() default "";
/**
* 自定义业务 key 的 Function
* @return key
*/
String customKeyFunction() default "";
/**
* 时间窗口流量数量表达式
* @return rateExpression
*/
String rateExpression() default "";
//===================== 时间窗口模式参数 ============================
/**
* 时间窗口,最小单位秒,如 2s,2h , 2d ,默认 1s
* @return rateInterval
*/
String rateInterval() default "1s";
//===================== 令牌桶模式参数 ============================
/**
* 令牌桶容量,默认为1,这个限制了瞬时最大并发数量
* @return bucketCapacity
*/
int bucketCapacity() default 1;
/**
* 令牌桶容量表达式
* @return bucketCapacityExpression
*/
String bucketCapacityExpression() default "";
/**
* 每次获取多少令牌,默认为1。一般不用设置,除非你知道你在做什么
* @return requestedTokens
*/
int requestedTokens() default 1;
}