前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >aizuda-limiter

aizuda-limiter

作者头像
阿超
发布2022-08-21 15:03:26
2110
发布2022-08-21 15:03:26
举报
文章被收录于专栏:快乐阿超快乐阿超

有人问我限流怎么做,单独抽出来说一下:

这里使用aizuda-limiter,文档:http://doc.aizuda.com/pages/9xd009/

example仓库:https://gitee.com/aizuda/aizuda-components-examples/blob/master/aizuda-limiter-example

首先引入:

代码语言:javascript
复制
<dependency>
  <groupId>com.aizuda</groupId>
  <artifactId>aizuda-limiter</artifactId>
  <version>1.0.0</version>
</dependency>

然后进行配置限流策略:

代码语言:javascript
复制
package com.aizuda.limiter.example;

import com.aizuda.limiter.metadata.MethodMetadata;
import com.aizuda.limiter.strategy.IKeyGenerateStrategy;
import org.springframework.stereotype.Component;

@Component
public class UserRateLimitStrategy implements IKeyGenerateStrategy {
    public final static String TYPE = "user";


    @Override
    public String getType() {
        // 请保证唯一性
        return TYPE;
    }

    @Override
    public String getKey(MethodMetadata methodMetadata, String parseKey) {
        return "admin";
    }
}

Controller上加上注解

代码语言:javascript
复制
package com.aizuda.limiter.example;

import com.aizuda.limiter.annotation.RateLimit;
import com.aizuda.limiter.strategy.IpKeyGenerateStrategy;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    /**
     * 限流
     * <p>
     * 测试多次访问观察浏览器及控制台输出日志
     * <p>
     * http://localhost:8080/test?name=abc
     */
    @GetMapping("/test")
    @RateLimit(
            // 唯一标示,支持SpEL表达式(可无),#name 为获取当前访问参数 name 内容
            key = "#name",
            // 限定阈值,时间间隔 interval 范围内超过该数量会触发锁
            count = 2,
            // 限制间隔时长(可无,默认 3 分钟)例如 5s 五秒,6m 六分钟,7h 七小时,8d 八天
            interval = "100s",
            // 策略(可无) ip 为获取当前访问IP地址(内置策略),自定义策略 user 为获取当前用户
            strategy = {IpKeyGenerateStrategy.TYPE, UserRateLimitStrategy.TYPE},
            // 提示消息(可无)
            message = "请勿频繁操作"
    )
    public String test(String name) {
        return "test" + name;
    }

}

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

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

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

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

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