Почему X-RateLimit-Remaining -1 в заголовке ответа при использовании весеннего облака api gateway ratelimit с redis? - PullRequest
2 голосов
/ 17 марта 2020

Я реализовал ratelimit с помощью redis в моем весеннем облачном API-шлюзе. Вот часть application.yml:

spring:  
  cloud:
    gateway:
      httpclient:
        ssl:
          useInsecureTrustManager: true
      discovery:
        locator:
          enabled: true
      routes:
        - id: test-rest-service
          uri: lb://test-rest-service
          predicates:
            - Path=/test/**
          filters:
            - RewritePath=/test/(?<path>.*), /$\{path}
            - name: RequestRateLimiter
              args:
                key-resolver: "#{@userRemoteAddressResolver}"
                redis-rate-limiter.replenishRate: 2
                redis-rate-limiter.burstCapacity: 3

Я вызвал GET API через почтальона и проверил заголовок ответа.

X-RateLimit-Remaining -1
X-RateLimit-Burst-Capacity 3
X-RateLimit-Replenish-Rate 2

Ограничение скорости не работает. Почему я получаю отрицательное значение для X-RateLimit-Remaining? Что это значит? Как мне это исправить?

1 Ответ

0 голосов
/ 27 апреля 2020

Это случилось со мной, потому что не было запущено ни одного экземпляра Redis. У вас есть два варианта:

1) Скачать и запустить экземпляр Redis, используя docker:

docker run --name redis -d redis

2) Вы можете использовать при тестировании Embedded Redis Server как это объясняется в следующей статье путем добавления зависимости maven:

<dependency>
  <groupId>it.ozimov</groupId>
  <artifactId>embedded-redis</artifactId>
  <version>0.7.2</version>
  <scope>test</scope>
</dependency>

и включения следующего фрагмента:

@TestConfiguration
public class TestRedisConfiguration {

    private RedisServer redisServer;

    public TestRedisConfiguration() {
        this.redisServer = new RedisServer(6379);
    }

    @PostConstruct
    public void postConstruct() {
        redisServer.start();
    }

    @PreDestroy
    public void preDestroy() {
        redisServer.stop();
    }
}
...