- 主页 > 生活百科 > >
接口限流还不太明白? 这篇文章可以看懂!( 三 )
/** * @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配置拦截器的代码就不贴了,以上就是完整的代码,至此分布式限流就完成了 。
- 如果觉得作者写的好,有所收获的话,点个关注推荐一下哟!!!
推荐阅读
-
大视角@小学生有猴儿,猛男就应该玩明世隐!,王者荣耀:妹子有瑶
-
「公转」在宇宙中,地球以10万公里时速向前狂奔,为何我们没有明显感觉?
-
【今朝品趣历史】抗日战争初期,中国为何兵败如山倒?看看双方子弹分发量就知道了
-
-
出血|肝病突袭,身体会有1臭2红3流血,哪怕只有一个,也别忽视!
-
无论什么品牌白酒,只要瓶身写有“这串代码”,都是酒精酒
-
-
演唱会|TFBOYS七周年演唱会,新歌发布众望所期,做好准备狂欢了吗?
-
中年|菲律宾要建核电,先来了解下巴丹这座史上最点儿背的核电站吧
-
经济日报|到底怎么样了?12张动图揭秘中国经济真相
-
-
吧吧嘛嘛 前辈放弃挣扎价格跳水,5G版iPhone12值得期待
-
-
崛起中国|民进党当局“亲美”太明显,“送礼”美涉台法案的暗中帮扶力量
-
复旦肿瘤发起“中国泌尿肿瘤MDT平台”四年辐射147座城
-
呆子小生|阿水的装杯环节,节目效果拉满,TES再次证明了自己
-
-
-
三国|三国两位枭雄为儿子取名, 一个是野心, 一个是期望
-
特斯拉体验店爆棚,现在下单3月提车,蔚来比亚迪不跟风降价