前几篇学习笔记,从普通springboot项目接入soul网关的原理 -> 数据同步机制之websocket -> sign插件签名认证 -> divide插件请求代理,将soul网关的大致流程捋了一遍。今天学习一下soul网关的rateLimiter插件,看下它是如何实现限流的。
看soul网关关于rateLimiter插件的介绍,它是采用redis令牌桶算法进行限流的。
我们先来看下源码里面的相关实现。
我们在第二篇笔记里面分析过插件链,知道了大部分插件是继承自AbstractSoulPlugin
抽象类的,插件链的顺序是global -> sign -> waf -> rate-limiter -> hystrix -> resilience4j -> divide -> webClient -> …………
。我们就来看一下RateLimiterPlugin
,它也是继承自AbstractSoulPlugin
,那么它也会先调用AbstractSoulPlugin
的execute
方法,找到与当前请求匹配的selector和rule之后,执行RateLimiterPlugin
的doExecute
方法。
我们看下doExecute
方法里面的具体实现
@Override
protected Mono<Void> doExecute(final ServerWebExchange exchange, final SoulPluginChain chain, final SelectorData selector, final RuleData rule) {
final String handle