redislimiter-spring-boot — это отличный распределённый фреймворк для ограничения потоков (API лимитёр) для Spring Boot и Spring Cloud, который особенно подходит для микросервисной архитектуры.
<dependency>
<groupId>com.tay</groupId>
<artifactId>redislimiter-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
server:
port: 8888 #порт
spring:
application:
name: demo1 #имя приложения обязательно для настройки, иначе не запустится
redis-limiter: #ограничитель потока
redis-host: 127.0.0.1 #ip сервера redis
check-action-timeout: 100 #максимальное время выполнения действия проверки доступа (в миллисекундах)
enable-dynamical-conf: true #включить динамическую конфигурацию ограничителя потока
spring.application.name должен быть настроен.
package com.tay.demo1;
import com.tay.redislimiter.RateLimiter;
import com.tay.redislimiter.dynamic.DynamicRateLimiter;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.TimeUnit;
@RestController
@RequestMapping("/demo")
public class DemoController {
@GetMapping("/test")
//на основе ограничения по пользователю, каждый пользователь может получить доступ максимум 2 раза в минуту, идентификатор пользователя находится в заголовке, ключ - userid
//метка RateLimiter представляет статическую конфигурацию, этот тип конфигурации нельзя динамически изменять
@RateLimiter(base = "#Headers['userid']", permits = 2, timeUnit = TimeUnit.MINUTES)
public String test() {
return "test!";
}
@GetMapping("/dynamictest")
//основано на ограничении по источнику IP, каждый источник IP может получить доступ не более 5 раз в минуту, IP источника находится в заголовке, ключ - X-Real-IP
//метка DynamicRateLimiter представляет динамическую конфигурацию, этот тип конфигурации можно динамически изменить во время работы
@DynamicRateLimiter(base = "#Headers['X-Real-IP']", permits = 5, timeUnit = TimeUnit.MINUTES)
public String dynamicTest() {
return "dynamictest!";
}
}
sudo docker run -d -p 6379:6379 redis
Это так просто!
Используя postman или restd, получите доступ к URL http://localhost:8888/demo/test, указав userid=tom в заголовке. Вы обнаружите, что tom может получить доступ только два раза за одну минуту.
Используя postman или restd, получите доступ к URL http://localhost:8888/demo/dynamictest, указав X-Real-IP=127.0.0.1 в заголовке. Вы обнаружите, что 127.0.0.1 может получить доступ не более пяти раз за одну минуту.
spring:
redis-limiter:
redis-host: 127.0.0.1 # ip сервера redis по умолчанию: 127.0.0.1
redis-port: 6379 # порт службы redis значение по умолчанию: 6379
redis-password: test # пароль доступа к redis значение по умолчанию: null
redis-connection-timeout: 2000 # время ожидания соединения redis значение по умолчанию: 2000
redis-pool-max-idle: 50 # максимальное количество незанятых соединений в пуле соединений redis значение по умолчанию: 50
redis-pool-min-idle: 10 # минимальное количество незанятых соединений в пуле соединений redis значение по умолчанию: 10
redis-pool-max-wait-millis: -1 # максимальное время ожидания получения соединения из пула соединений redis значение по умолчанию: -1
redis-pool-max-total: 200 # максимальное общее количество соединений в пуле соединений redis значение по умолчанию: 200
redis-key-prefix: #RL # префикс ключа доступа значение по умолчанию: #RL
check-action-timeout: 100 # максимальное время выполнения действия проверки доступа (в миллисекундах) значение по умолчанию: 100
enable-dynamical-conf: true # включить динамическую конфигурацию ограничителя потока значение по умолчанию: false
channel: #RLConfigChannel # имя канала для отправки событий изменения конфигурации значение по умолчанию: #RLConfigChannel
@RateLimiter и @DynamicRateLimiter — это две метки, которые пользователи используют чаще всего.
@RateLimiter @DynamicRateLimiter Эти две метки имеют одинаковое использование, и у них есть четыре атрибута: base, path, timeUnit и permits.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )