- 主页 > 生活百科 > >
接口限流还不太明白? 这篇文章可以看懂!( 三 )
/** * @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配置拦截器的代码就不贴了,以上就是完整的代码,至此分布式限流就完成了 。
- 如果觉得作者写的好,有所收获的话,点个关注推荐一下哟!!!
推荐阅读
-
中新经纬|东兴证券跌2.87%报12.88元,振幅3.54%
-
-
-
-
科普大世界:19个有致病性,要闹成啥样?李兰娟团队发现新冠病毒再现33个突变
-
七球半个说|前缘未散,真爱依旧,将执手复合,白头到老的四大星座,未来一周
-
-
福田汽车|中国乘用车市场进一步复苏;宁德时代加速全球扩张;特斯拉宣布股票一拆五计划
-
铁岭一男子瞒报庄河行程,强制隔离!警方曝光音频视频
-
阮健弘|上半年金融统计数据发布:货币政策强调适度 宏观杠杆率阶段上升
-
王者天黑君|笑影干将上演“血条消失术”,拯救光之BP,AG七三开阵容获胜
-
[当代名医]脑血栓是"堵"出来的?看看下面这篇文章你就知道了
-
思齐谈娱乐|明星爸爸,张予曦的像兄妹,周雨彤的时尚,赵露思:小鲜肉!
-
鹈鹕队|真拿自己当杜兰特了?英格拉姆绝杀失败!鹈鹕季后赛门票悬了
-
-
-
十几个网贷逾期两年 家人接到电话说我网贷逾期怎么办
-
-
大C美妆|宋祖儿穿不对称鞋子惊艳现身,时髦人必备,不对称的美越来越流行
-
迪巴拉|尤文王子离开倒计时?米体放出重磅消息,一亿欧元给钱就放迪巴拉!