Spring Cloud Gateway Redis, ограничивающий количество записей в базе данных

Я реализовал шлюз API с облачным шлюзом Spring. Я добавил ограничители скорости Redis со следующими конфигурациями:

spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
    routes:
    - id: user-service
      uri: lb://user-service
      predicates:
      - Path=/user/**
      filters:
      - StripPrefix=1
      - name: RequestRateLimiter
        args:
          key-resolver: "#{@remoteAddrKeyResolver}"
          redis-rate-limiter.replenishRate: 1
          redis-rate-limiter.burstCapacity: 5
---
spring:
  redis:
    host: localhost
    port: 6379
    database: 0

Я могу успешно заблокировать пользовательские запросы с кодом ошибки 429 TOO Много запросов.

Теперь я хочу, чтобы та же запись была вставлена ​​в базу данных Redis, чтобы я мог ее анализировать.

Какую конфигурацию мне нужно сделать? Я посетил блог, где он показывает это, но не смог найти связанный с ним код. Вот ссылка этого блога.

Кроме того, может ли кто-нибудь объяснить точный разница между пополнениями Rate и BurstCapacity на каком-то примере? Я немного смущен здесь.

Невозможно добавить 429 в базу данных. У нас есть открытый вопрос для использования исключения, на которое вы могли бы ответить. Мы используем алгоритм en.wikipedia.org/wiki/Token_bucket. Скорость пополнения — это скорость добавления токенов в корзину. Максимальная емкость — это количество токенов, которое может храниться в корзине.

spencergibb 15.02.2019 18:11

@spencergibb спасибо за ответ. Есть ли способ отслеживать количество пользователей, превышающих скорость пополнения, вместе с некоторыми базовыми данными о пользователях?

Vijay 01.03.2019 11:44

В настоящее время нет способа сделать это

spencergibb 01.03.2019 16:51

@spencergibb Можете ли вы объяснить, как механизм ограничения скорости работает внутри Redis DB, поскольку я не вижу никаких записей, связанных с ним, в моей локальной базе данных Redis. Кроме того, можете ли вы сказать мне, как я могу использовать это в кластерной среде? У меня есть два экземпляра шлюза API в моем приложении.

Vijay 20.03.2019 07:39

У них истекает время ожидания ключей, поэтому, если у вас нет постоянного трафика, там может ничего не быть, когда вы пойдете смотреть. Кластеризация шлюзов не должна иметь никакого эффекта, на самом деле причина использования Redis ИЗ-ЗА кластеризации.

spencergibb 21.03.2019 17:19

@spencergibb Я написал несколько контроллеров в шлюзе API, к которым я получаю доступ из других моих микросервисов через фиктивный клиент, в котором у меня есть два вопроса: 1) Могу ли я каким-либо образом ограничить трафик, поступающий извне, и разрешить трафик только из моих микросервисов. 2) Когда я пишу контроллер в шлюзе API, он напрямую обращается к конечным точкам, не переходя к фильтрам (ограничитель скорости повторного использования и настраиваемый фильтр), которые я прописал в маршрутах шлюза в моем файле bootstrap.yml. Есть ли способ, которым я могу их проверить?

Vijay 04.04.2019 16:00

Используя uri: forward:/mycontroller, да, вы можете.

spencergibb 04.04.2019 16:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
1 056
0

Другие вопросы по теме