- 主页 > 生活百科 > >
接口限流还不太明白? 这篇文章可以看懂!( 三 )
/** * @Description 限流的注解,标注在类上或者方法上 。在方法上的注解会覆盖类上的注解,同@Transactional * @Author CJB * @Date 2020/3/20 13:36 */@Inherited@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface RateLimit {/*** 令牌桶的容量,默认100* @return*/int capacity() default 100;/*** 每秒钟默认产生令牌数量,默认10个* @return*/int rate() default 10;}/** * @Description 限流的拦器 * @Author CJB * @Date 2020/3/19 14:34 */@Componentpublic class RateLimiterIntercept implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {if (handler instanceof HandlerMethod){HandlerMethod handlerMethod=(HandlerMethod)handler;Method method = handlerMethod.getMethod();/*** 首先获取方法上的注解*/RateLimit rateLimit = AnnotationUtils.findAnnotation(method, RateLimit.class);//方法上没有标注该注解,尝试获取类上的注解if (Objects.isNull(rateLimit)){//获取类上的注解rateLimit = AnnotationUtils.findAnnotation(handlerMethod.getBean().getClass(), RateLimit.class);}//没有标注注解,放行if (Objects.isNull(rateLimit))return true;//尝试获取令牌,如果没有令牌了if (!RedisLimiterUtils.tryAcquire(request.getRequestURI(),rateLimit.capacity(),rateLimit.rate())){//抛出请求超时的异常throw newTimeOutException();}}return true;}} - SpringBoot配置拦截器的代码就不贴了,以上就是完整的代码,至此分布式限流就完成了 。
- 如果觉得作者写的好,有所收获的话,点个关注推荐一下哟!!!
推荐阅读
-
-
本田CRV|从16万跌到10.2万,这SUV火了,上个月卖出8211辆,直追本田CRV
-
武器装备新视野|接近中美总和,各国装甲师规模如何?俄装备780辆坦克全球第一
-
『文综』二轮黄金复习法 | 高考文综超具体的提分攻略,用好它就够了!
-
「市井觅食记」饮食记得“夏养心”,别忘让家人喝这汤,顺利过夏天,立夏将至
-
DNF|DNF:希洛克四模式简单介绍,平民优先小队模式
-
-
-
-
育儿小手册:你了解了吧,剑与远征复苏之花获取途径介绍
-
掌阅■强大的智能手表,拥有和小爱机器人一样的功能,给你不一样的体验
-
-
从榴莲酱到榴莲酥,详细做法告诉你,简单易做,新手零失败
-
-
[印度]印度游客来中国体验公路,一上车就懵圈了:你们称这些为高速
-
PisCiJ. 中国终于对“英超”下手了,百亿市场受到波及,英国全面禁用华为5G
-
-
-
Super health最佳健康|火爆全网的95后健身女裁判,身材美到犯规!网友:谁顶得住?
-
小户型的房子,足足68平米,如果用方式6万元是不是很划算?