核心流程图
通过下列流程图(简化)可看出,限流处理策略即将每次请求根据限流配置判断是否触发限流,当校验时线程中断,则抛出IllegalStateException,当触发限流时,抛出RequestNotPermitted异常,本次请求均会终止调用。否则,本次请求继续正常调用。
RateLimiterConfig
限流器核心配置。 比如timeoutDuration:1s,limitRefreshPeriod:3s,limitForPeriod:1000. 表示从应用启动后,每三秒至多允许1000个请求,获取授权操作最多可等待1s,超过1000请求,会抛出RequestNotPermitted异常,需等待下一个3s周期,重新刷新1000个授权。
private final Duration timeoutDuration;//获取授权操作的超时时间。 默认:5秒
private final Duration limitRefreshPeriod;//限流周期时长。 默认:500纳秒
private final int limitForPeriod;//周期内允许通过的请求数量。 默认:50
限流算法:
- 令牌桶算法