- 主页 > 生活百科 > >
接口限流还不太明白? 这篇文章可以看懂!( 三 )
/** * @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配置拦截器的代码就不贴了,以上就是完整的代码,至此分布式限流就完成了 。
- 如果觉得作者写的好,有所收获的话,点个关注推荐一下哟!!!
推荐阅读
-
-
【华为荣耀】华为旗舰一降再降,麒麟990 5G+“新低价”,网友:华为良心了
-
-
-
-
田野牧蜂蜂蜜知识|有胃病能吃蜂王浆和蜂糖吗?胃不好能吃蜂王浆和蜂蜜吗?
-
-
上海市城市管理行政执法局网站|奉贤城管:新增违建零容忍 普法宣传快速处置
-
-
老照片|历史瞬间:19张您没见过的老照片,看完不敢相信自己的眼睛
-
【】交响乐队的四组乐器组到底谁更重要呢?谁在乐队里的分量最大,地位最高呢?
-
-
汽车资讯观|亿咖通科技掌握的技术将促进中国智能科技的发展,技术成就未来
-
「时尚迪科」回头率真的超级高!,渔网袜渔夫帽女神走在路上
-
李宇春|“挖呀挖”黄老师被扒曾用艺名混圈,好友曝其背后有资本运作
-
萧敬腾|萧敬腾再回应红毯状态,大方晒毛发检测结果,网友:真的很酷!
-
中国应急管理|焦作6人亡窒息事故通报:工人掉入塑料物料罐中窒息死亡,其他人员盲目施救致使事故后果扩大
-
只有中国才有的鱼,被称为“鱼中之王”,现在只有少数人会吃
-
-
「别克君威」再等1天就上市,直降4.7万,2.0T小钢炮,完胜宝马3系,又迷倒一片