前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何做接口限流

如何做接口限流

作者头像
Cheng_Blog
发布2022-02-25 09:32:03
5300
发布2022-02-25 09:32:03
举报
文章被收录于专栏:Cheng's BlogCheng's Blog

在大并发的项目中,例如抢票系统、秒杀系统中,常常会遇到一次处理很多个请求,当服务器压力过大时,就会对用户的体验产生影响。在这里可以写一个限制一定时间内接口访问数量的注解,方便又高效;

  1. 定义一个注解
代码语言:javascript
复制
@Retention(RUNTIME)
@Target(METHOD)
public @interface AccessLimit {
	/**
	* 限制时间
	*/
	int seconds();
	/**
	* 最大访问数
	*/
	int maxCount();
	/**
	* 是否需要登录
	*/
	boolean needLogin() default true;
}
  1. 接收加上注解的类发送过来的请求,并筛选请求。
代码语言:javascript
复制
@Service
public class AccessInterceptor  extends HandlerInterceptorAdapter{
	
	@Autowired
	MiaoshaUserService userService;
	
	@Autowired
	RedisService redisService;
	
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		if(handler instanceof HandlerMethod) {
			AccessLimit accessLimit = hm.getMethodAnnotation(AccessLimit.class);
			if(accessLimit == null) {
				return true;
			}
			int seconds = accessLimit.seconds();
			int maxCount = accessLimit.maxCount();
			boolean needLogin = accessLimit.needLogin();
			//筛选逻辑
		}
		return true;
	}
}
  1. 使用方法,将注解放在需要校验的方法上,即可生效
代码语言:javascript
复制
@AccessLimit(seconds=5, maxCount=5, needLogin=true)
@RequestMapping(value="/path", method=RequestMethod.GET)
@ResponseBody
public Result<String> test() {
}

发表时间:2020-04-26

本站文章除注明转载/出处外,皆为作者原创,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档