赞
踩
1.在请求处理之前,所有的请求都要拿到一个令牌,才会被处理
2.根据限流大小,我们可以设置按照一定速率往桶里添加令牌
3.设置最大的桶令牌容量限制,当令牌桶满时,新的令牌就会被丢弃或拒绝
4.请求达到后首先要获取令牌桶中的令牌,只有拿着令牌才可以进行其他的业务逻辑,业务完毕,令牌删除
5.令牌桶有最低限额,达到最低限额时,请求处理完毕后则不会删除,这样保证了有足够的限流
首先我们添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
以及在yml中添加令牌桶的相应配置
配置需求:经过网关的ip一秒内只能发送1次请求
注意,对哪个服务进行限流,就在哪个服务的filter中配置
添加redis的配置
然后在网关启动类中写一个Bean
@Bean
public KeyResolver ipKeyResolver(){
return new KeyResolver() {
@Override
public Mono<String> resolve(ServerWebExchange exchange) {
//获取到客户端的访问ip进行限制
return Mono.just(exchange.getRequest().getRemoteAddress().getHostName());
}
};
}
完毕上述步骤后就可以测试重启网关
然后我们正常访问当前服务,如图能够正常返回
但是当我们快速点击连续访问时 则会报429
即达到了网关限流的目的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。