Mapmap = new HashMap<>(); for (int i = 0; i < 100; i++) { map.put("account",IdUtils.genRandomNum(8)); map.put("password",IdUtils.genRandomNum(5)); HttpUtils.sendPost("http://localhost:8087/user/login", map); System.out.println(i); }
于是加一个简单的请求限流 顺便学习相关技能
先引用相关jar包
io.github.forezp distributed-limit-core 1.0.2
本地限流在配置文件 application.properties 中添加配置
limit.type: local
需要限流的Controller方法上添加注解
@Limit(identifier = "forezp", limtNum = 1, seconds = 5)
完事... 能达到需求了就ok
这里限流针对的是单个请求的简单限流,最好还是针对ip做限流其他限流方式
令牌桶算法:说实话没理解...
public class RateLimiterDemo { private static RateLimiter limiter = RateLimiter.create(5); public static void exec() { limiter.acquire(1); try { // 处理核心逻辑 TimeUnit.SECONDS.sleep(1); System.out.println("--" + System.currentTimeMillis() / 1000); } catch (InterruptedException e) { e.printStackTrace(); } }}
漏桶算法示例:
public class CountRateLimiterDemo1 { private static AtomicInteger count = new AtomicInteger(0); public static void exec() { if (count.get() >= 5) { System.out.println("请求过多!"+System.currentTimeMillis()/1000); } else { count.incrementAndGet(); try { //处理核心逻辑 TimeUnit.SECONDS.sleep(1); System.out.println("--"+System.currentTimeMillis()/1000); } catch (InterruptedException e) { e.printStackTrace(); } finally { count.decrementAndGet(); } } }}
记录下代码,方面下次使用。
详情请阅读原作者: