一、使用流程
1) 引入坐标
org.springframework.boot
spring-boot-starter-data-redis-reactive
2.1.3.RELEASE
2) 创建bean对象(根据什么条件限流)
@Bean
public KeyResolver ipKeyResolver(){
return new KeyResolver() {
@Override
public Mono resolve(ServerWebExchange exchange) {
//此处根据用户的id做为条件限流
return Mono.just(exchange.getRequest().getRemoteAddress().getHostName());
}
};
}
条件选择如下
用户ip地址(桶是私有)
用户用户名(桶是私有)
微服的路径(桶是共享的)
3)添加配置
routes:
- id: 微服务应用名
uri: lb://微服务应用名
predicates:
- Path=/微服务应用名/**
filters:
- StripPrefix= 1
- name: RequestRateLimiter #请求数限流 名字不能随便写
args:
key-resolver: "#{@ipKeyResolver}" #限流依据的条件bean对象id
redis-rate-limiter.replenishRate: 1 #令牌桶每秒填充平