gateway同时配置了全局限流和局部限流,但是局部限流不生效,请用代码解决一下
时间: 2024-05-05 17:19:48 浏览: 66
可以通过修改gateway的配置文件来解决这个问题。假设全局限流的配置如下:
```
spring:
cloud:
gateway:
default-filters:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 10
redis-rate-limiter.burstCapacity: 20
```
局部限流的配置如下:
```
- id: user-service
uri: lb://user-service
predicates:
- Path=/user/**
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 5
redis-rate-limiter.burstCapacity: 10
```
这里假设我们要对`user-service`进行局部限流。我们需要检查一下全局限流和局部限流的`RequestRateLimiter`的名字是否一致。如果不一致,我们需要将局部限流的`RequestRateLimiter`的名字改成与全局限流一致。
修改后的配置如下:
```
- id: user-service
uri: lb://user-service
predicates:
- Path=/user/**
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 5
redis-rate-limiter.burstCapacity: 10
key-resolver: "#{@apiKeyResolver}"
```
这里我们加入了一个`key-resolver`参数,用于解决全局限流和局部限流的`RequestRateLimiter`使用了不同的key生成策略的问题。这里我们使用了一个自定义的`apiKeyResolver`来生成key,以保证全局限流和局部限流使用相同的key生成策略。
阅读全文