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

OSCHINA-MIRROR/shiqiyue-flow-control

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
readme.md

FlowControl (Контроль потока)

FlowControl решает проблему контроля количества обращений к API и предотвращения злонамеренных вызовов. Поддерживает использование в распределённых приложениях. Spring Boot поддерживает FlowControl с помощью flowcontrol-spring-boot-starter, доступного по ссылке: https://gitee.com/shiqiyue/flow-control/tree/master/flowcontrol-spring-boot-starter.

Принцип работы

  • Блокировка запросов и подсчёт обращений. Если количество обращений превышает установленный лимит, возвращается сообщение об ошибке. В противном случае запрос обрабатывается.
  • Использование распределённой блокировки для точного блокирования запросов.
  • Сохранение данных о запросах в Redis для обеспечения работы в распределённой среде. Важно, чтобы при работе в распределённой системе все обращения осуществлялись к одной базе данных Redis.

Использование

  1. Настройка параметров контроля потока:
    • Реализовать интерфейс FlowControlConfigurer. Пример кода:

      public class CustomFlowControlConfigurer implements FlowControlConfigurer {
          /***
           * Конфигурация клиента Redis
           */
          @Override
          public RedissonClient redissonClient() {
              Config config = new Config();
              config.useSingleServer().setAddress("redis://localhost:6379");
              RedissonClient redisson = Redisson.create(config);
              return redisson;
          }
      
          /***
           * Действие, выполняемое после успешной блокировки запроса
           */
          @Override
          public FlowControlInterceptAction flowControlInterceptAction() {
              return new DefaultFlowControlInterceptAction();
          }
      
          /***
           * Источник данных для блокировки запросов
           */
          @Override
          public FlowControlDao flowControlDao() {
              return new InMemoryFlowControlDao();
          }
      
          /***
           * Стратегия именования ключей Redis
           */
          @Override
          public RedisKeyNameStrategy redisKeyNameStrategy() {
              return new DefaultRedisKeyNameStrategy();
          }
      }
2. Создание фильтра сервлета:

    ```
    @Configuration
    public class SpringMvcConfig extends WebMvcConfigurerAdapter {

        @Autowired
        private CustomFlowControlConfigurer flowControlConfigurer;

        /***
         * Создание фильтра с использованием сервлета
         *
         * @return
         */
        @Bean
        public FilterRegistrationBean testFilterRegistration() {

            FilterRegistrationBean registration = new FilterRegistrationBean();
            registration.setFilter(new FlowControlFilter(flowControlConfigurer));
            registration.addUrlPatterns("/*");
            registration.setName("flowControlFilter");
            registration.setOrder(1);
            return registration;
        }
    }
  1. Создание перехватчика Spring MVC:

    @Configuration
    public class SpringMvcConfig extends WebMvcConfigurerAdapter {
    
        @Autowired
        private CustomFlowControlConfigurer flowControlConfigurer;
    
        /***
         * Использование перехватчика SpringMVC
         */
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            FlowControlHandlerInterceptor flowControlHandlerInterceptor = new FlowControlHandlerInterceptor(
                    flowControlConfigurer);
            registry.addInterceptor(flowControlHandlerInterceptor).addPathPatterns("/**");
    
            super.addInterceptors(registry);
        }
    }

Пример использования: flow-control-sample доступен по ссылке: https://gitee.com/shiqiyue/flow-control/tree/master/flow-control-sample.

Используемые технологии: Redis и Redisson для реализации распределённой блокировки и хранения данных.

Лицензия: Flow Control распространяется под лицензией Apache 2.0.

Комментарии ( 0 )

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

Введение

Спринг бут: контроль потока Контроль количества обращений пользователей к API Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/shiqiyue-flow-control.git
git@api.gitlife.ru:oschina-mirror/shiqiyue-flow-control.git
oschina-mirror
shiqiyue-flow-control
shiqiyue-flow-control
master