Map<String,String> map = 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包
<dependency>
<groupId>io.github.forezp</groupId>
<artifactId>distributed-limit-core</artifactId>
<version>1.0.2</version>
</dependency>
本地限流在配置文件 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();
}
}
}
}
记录下代码,方面下次使用。
详情请阅读原作者:点我
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。