- 主页 > 生活百科 > >
接口限流还不太明白? 这篇文章可以看懂!( 三 )
/** * @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配置拦截器的代码就不贴了,以上就是完整的代码,至此分布式限流就完成了 。
- 如果觉得作者写的好,有所收获的话,点个关注推荐一下哟!!!
推荐阅读
-
『央视』美国政府卫生研究机构前负责人抨击抗疫“被政治化”
-
-
时尚芭莎|换个发型而已,没想能让甜味娜扎也变酷女孩?
-
-
集团|信托牌照价值几何?天瑞集团8.67亿受让长城新盛35%股权
-
-
锦安话体育▲别光喝吃点菜!追梦:我和库里挡拆能打爆奥尼尔
-
-
中国之声|大连一小区业主称买新房却喝了十个月绿化罐车水 当地回应:约谈!
-
ROG,ROG幻14 独家首创光显矩阵屏 ROG幻14 2K屏轻薄高效能潮玩笔记本上市
-
南方洪涝致超260万人受灾,22.8万人次紧急转移
-
[天歌88]历任美国总统的年轻照片!帅到不像话(图片)
-
军心|中国市场“稳军心”,卫士告捷,捷豹路虎新帅笑了
-
海风数码@米粉节又来了!卢伟冰笑了,你看上的好多都是Redmi!
-
荣耀MagicBook锐龙版全面升级 华为荣耀magicbook锐龙怎么样
-
-
知事数小码 拜振华上台后发货?,ASML光刻机订单已下!价值1.2亿美元
-
-
-
齐鲁晚报|有创意!这样漂亮又充满生机的蔬菜盆栽你见过吗?