1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/aiyuntang-redislimiter-spring-boot

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README-CN.md 7.3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 14:35 892f7f0

redislimiter-spring-boot

redislimiter-spring-boot — это отличный распределённый фреймворк для ограничения потоков (API лимитёр) для Spring Boot и Spring Cloud, который особенно подходит для микросервисной архитектуры.

Быстрый старт

1. git clone https://github.com/tangaiyun/redislimiter-spring-boot.git

2. cd redislimiter-spring-boot-starter

3. mvn clean install

4. Создайте новый проект Spring boot API, следуя примеру demo1 проекта. В зависимостях проекта добавьте:

        <dependency>
            <groupId>com.tay</groupId>
            <artifactId>redislimiter-spring-boot-starter</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

5. Измените файл resources/application.yml в проекте:

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 должен быть настроен.

6. Создайте класс RestController:

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!";
    }

}

7. Установите redis на локальном компьютере и запустите его. Рекомендуется установить среду docker на вашем локальном компьютере, а затем выполнить:

sudo docker run -d -p 6379:6379 redis

Это так просто!

8. Запустите Demo1Application.java

9. Тестирование

Используя 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 может получить доступ не более пяти раз за одну минуту.

Расширенное руководство

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   

2 Метки

@RateLimiter и @DynamicRateLimiter — это две метки, которые пользователи используют чаще всего.

2.1 Описание меток — общее описание

@RateLimiter @DynamicRateLimiter Эти две метки имеют одинаковое использование, и у них есть четыре атрибута: base, path, timeUnit и permits.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/aiyuntang-redislimiter-spring-boot.git
git@api.gitlife.ru:oschina-mirror/aiyuntang-redislimiter-spring-boot.git
oschina-mirror
aiyuntang-redislimiter-spring-boot
aiyuntang-redislimiter-spring-boot
master