个人练习作品。
本项目是一个整合了日志
和限流
功能的中间件。
按照规范打包为 SpringBootStarter。
日志使用 SLF4J
,限流使用 RateLimiter
。
因没有发布至 Maven **仓库,您可以下载项目后自己用 Maven 的 Install 到本地仓库中使用。
在要输出日志的方法上添加 @SystemLog(businessName = "业务名称")
注解。
@SystemLog(businessName = "更新对应文章的点赞量")
public ResponseResult updateLikeCount(@PathVariable Long id) {
return articleService.updateLikeCount(id);
}
在要限流的方法上添加 @DoRateLimiter(permitsPerSecond = 1.0, returnJson = "JSON 对象")
注解。
注意:JSON 需要是方法返回对象的 JSON 形式!
@DoRateLimiter(permitsPerSecond = 1.0, returnJson =
"{" +
"\"code\": 500," +
"\"msg\": \"请休息一下再点击~\"," +
"\"data\": null" +
"}")
public ResponseResult updateLikeCount(@PathVariable Long id) {
return articleService.updateLikeCount(id);
}
作为扩展,您可以自己实现 LimitService
接口中的方法,自己定义一个限流方法类。这样,您可以不局限于使用 RateLimiter
,还可以使用任何其他的中间件,甚至是您自己实现的限流!
只需在 yml
文件中如下配置:
funnellog:
limit:
# 您自己实现的类的全类名
clazz: com.creator.service.impl.MyLimitServiceImpl
对应的类:
public class MyLimitServiceImpl implements LimitService {
@Override
public Object access(ProceedingJoinPoint joinPoint, Method method, DoRateLimiter doRateLimiter, Object[] args) throws Throwable {
// TODO
}
}