All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ghp.request.annotation.RequestLimit Maven / Gradle / Ivy

package com.ghp.request.annotation;

import com.ghp.request.enums.RequestLimitStrategy;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author ghp
 * @title
 * @description
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RequestLimit {

    /**
     * 限流策略
     */
    RequestLimitStrategy strategy() default RequestLimitStrategy.TOKEN_BUCKET;

    /**
     * 每秒可以访问的请求次数(这个本质是令牌的生成速率)
     */
    int qps();

    /**
     * 限流后打印的异常信息
     */
    String message() default "接口请求过于频繁,请稍后再试";

    /**
     * 桶的容量,默认是 10,也就是最大可处理的并发请求量是 10
     * 桶越大能够处理的突发流量越多,具体请根据系统实际情况测试而定
     * {@link com.ghp.request.limiter.impl.LeakyBucketLimiter} 和
     * {@link com.ghp.request.limiter.impl.TokenBucketLimiter} 需要的参数
     */
    int capacity() default 10;

    /**
     * 窗口大小,默认是 1000ms
     * 窗口越大能够能够处理的突发流量越多,具体请根据系统实际情况测试而定
     * {@link com.ghp.request.limiter.impl.FixedWindowCountLimiter}
     * 和 {@link com.ghp.request.limiter.impl.SlideWindowCountLimiter} 需要的参数
     */
    int interval() default 1000;

    /**
     * 滑块窗口大小,默认 100ms
     * 滑块窗口越小,精度越高,流量越平滑,具体请根据系统实际情况测试而定
     * {@link com.ghp.request.limiter.impl.SlideWindowCountLimiter} 需要的参数
     */
    int slider() default 100;

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy