FlowControl (Контроль потока)
FlowControl решает проблему контроля количества обращений к API и предотвращения злонамеренных вызовов. Поддерживает использование в распределённых приложениях. Spring Boot поддерживает FlowControl с помощью flowcontrol-spring-boot-starter, доступного по ссылке: https://gitee.com/shiqiyue/flow-control/tree/master/flowcontrol-spring-boot-starter.
Принцип работы
Использование
Реализовать интерфейс 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;
}
}
Создание перехватчика 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 )