package com.qmth.boot.core.rateLimit.annotation;

import com.qmth.boot.core.rateLimit.entity.RateLimitScope;
import com.qmth.boot.core.rateLimit.entity.RateLimitTarget;

import java.lang.annotation.*;

/**
 * 限流设置注解
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
public @interface RateLimit {

    /**
     * 数量限制
     *
     * @return
     */
    int count();

    /**
     * 作用范围，默认为整个集群
     *
     * @return
     */
    RateLimitScope scope() default RateLimitScope.CLUSTER;

    /**
     * 限流对象，默认为所有访问者
     *
     * @return
     */
    RateLimitTarget target() default RateLimitTarget.ALL;

    /**
     * 时间范围，单位为毫秒，默认为0；
     * 为0时表示不针对时间段，而是控制并发数量
     *
     * @return
     */
    long period() default 0;

}
