赞
踩
1.RateLimiter比较常用的方法
- /**
- * 创建一个稳定输出令牌的RateLimiter,保证了平均每秒不超过permitsPerSecond个请求
- * 当请求到来的速度超过了permitsPerSecond,保证每秒只处理permitsPerSecond个请求
- * 当这个RateLimiter使用不足(即请求到来速度小于permitsPerSecond),会囤积最多permitsPerSecond个请求
- */
- public static RateLimiter create(double permitsPerSecond);
-
-
-
- /**
- * tryAcquire(long timeout, TimeUnit unit)
- * 从RateLimiter 获取许可如果该许可可以在不超过timeout的时间内获取得到的话,
- * 或者如果无法在timeout 过期之前获取得到许可的话,那么立即返回false(无需等待)
- */
- public boolean tryAcquire(long timeout, TimeUnit unit);
2.acquire()方法
RateLimiter rateLimiter = RateLimiter.create(3); @RequestMapping("/spike") public Object spike() { System.out.println("等待时间" + rateLimiter.acquire()); //购买逻辑 return "购买成功"; }
用JMeter同时发5个请求访问,可以发现出现了等待
- 等待时间0.0
- 等待时间0.0
- 等待时间0.0
- 等待时间0.0
- 等待时间0.284812
3.tryAcquire()方法
- @RequestMapping("/buy")
- public Object buy() {
- //判断能否在1秒内得到令牌,如果不能则立即返回false,不会阻塞程序
- if (!rateLimiter.tryAcquire(1000, TimeUnit.MILLISECONDS)) {
- System.out.println("脸丑,短期无法获取令牌!");
- return "购买失败";
- }
- System.out.println("购买成功");
- //购买逻辑
- return "购买成功";
- }
用JMeter同时发10个请求访问,可以发现出现了等待超过1秒的情况
- 购买成功
- 购买成功
- 购买成功
- 购买成功
- 脸丑,短期无法获取令牌!
- 脸丑,短期无法获取令牌!
- 脸丑,短期无法获取令牌!
- 购买成功
- 购买成功
- 购买成功
--------个人使用记录,希望能帮助到大家一点点。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。