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); }
因而加一個簡單的請求限流 順便學習相關技能html
先引用相關jar包git
<dependency> <groupId>io.github.forezp</groupId> <artifactId>distributed-limit-core</artifactId> <version>1.0.2</version> </dependency>
本地限流在配置文件 application.properties 中添加配置github
limit.type: local
須要限流的Controller方法上添加註解算法
@Limit(identifier = "forezp", limtNum = 1, seconds = 5)
完事... 能達到需求了就ok
這裏限流針對的是單個請求的簡單限流,最好仍是針對ip作限流app
其餘限流方式
令牌桶算法:dom
說實話沒理解...ide
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(); } } } }
記錄下代碼,方面下次使用。ui
詳情請閱讀原做者:點我code