- 主页 > 生活百科 > >
接口限流还不太明白? 这篇文章可以看懂!( 三 )
/** * @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配置拦截器的代码就不贴了,以上就是完整的代码,至此分布式限流就完成了 。
- 如果觉得作者写的好,有所收获的话,点个关注推荐一下哟!!!
推荐阅读
-
-
音乐|「a-nation online 2020」火热开唱 跨国阵容组团点燃舞台主场
-
【综艺小剧透】除了被删掉的6集,女主也是大问题,共3部分原因,枕上书口碑下降
-
-
-
《夏天里的成长》公开课教案?《夏天里的成长》优质课教案
-
-
三代|“豪不过三,富不过六,穷不过九”,老祖宗的金字良言,受益终生
-
盘点科技学生党的福音?,口罩垫杯评测:男女都用得上的好物件
-
市场|大量印钞是否会有损美元全球储备货币地位?美联储主席回应
-
#蓝景源#显像管电视机的巅峰:特丽珑,一项曾经挽救了索尼的技术
-
位梦娱乐|航空公司宁可赔几十亿,也不允许乘客跳伞逃生,为什么飞机遇难
-
济南城事|临港区拓展纤维入选市“一企一技术”研发中心
-
-
小懒猫yen|每天抢着送钱的人不断,捞金渠道令人叹为观止,和珅15年贪了8亿
-
三角解密|民众:美政府不要太双标,媒体战升级!美媒或将被驱逐出境
-
【】世卫组织:全球新冠肺炎确诊病例累计超2768万例
-
小米|2022年安卓之光!小米12 Ultra保护壳曝光:背部摄像头布局敲定
-
此人位列梁山108将第76位,才能足以进入天罡却一直被误会为废物
-