/FunnelLog

一个整合了日志和限流功能的 SpringBootStarter 中间件

Primary LanguageJava

介绍

个人练习作品。

本项目是一个整合了日志限流功能的中间件。

按照规范打包为 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
    }
}

效果

日志

image

限流

image