Redis RateLimiter с Spring-boot 2.0.5.RELEASE - PullRequest
       10

Redis RateLimiter с Spring-boot 2.0.5.RELEASE

0 голосов
/ 02 декабря 2018

мы пытаемся реализовать RateLimiter, используя spring-boot (2.0.5.RELEASE) и redis.Но мы не получаем ожидаемый ответ, т.е. ошибка httpStatusCode 429 (слишком много запросов).мы видим приложение, подключенное к серверу redis.но мы не видим ключей на сервере Redis.мы не получаем никакой ошибки.Любые идеи или любой рабочий пример помогут.

, пожалуйста, найдите pom.xml ниже.

 <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId> 
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.3</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-gateway</artifactId>
            <version>2.0.0.RC2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

spring:
  cloud:
    gateway:
      routes:
      - id: requestratelimiter_route
        uri: http://localhost:8080/gateway/v1/api/get
        predicates:
        - Path=/**
        filters:
        - name: RequestRateLimiter
          args:
            redis-rate-limiter.replenishRate: 10
            redis-rate-limiter.burstCapacity: 20
  redis:
    host: localhost
    port: 6379
  security:
    user:
      name: user
      password: user

@Bean
    KeyResolver userKeyResolver() {

        return new KeyResolver() {
            @Override
            public Mono<String> resolve(ServerWebExchange exchange) {
                LOGGER.info("serverWebExchange.getClass().getName(): " + exchange.getClass().getName());
                return Mono.just(exchange.getSession().subscribe().toString());

            }
        };
    }

    @Bean
    RedisRateLimiter myRateLimiter() {
        return new RedisRateLimiter(10, 20);
    }
...