RateLimiter--限流--使用案例

import com.google.common.util.concurrent.RateLimiter;

import static java.lang.Thread.currentThread;

/**

 * @desc RateLimiter 的使用案例
 *
 * 说明: 想开发一个程序向数据库中写入数据、向中间件服务器中发送消息、对某个
 *      远程 TCP 端口发送字节,若这些操作的速率无法被控制,则可能会引起数据库
 *      拒绝服务、中间件宕机、TCP 服务端口无法响应等问题,借助于 RateLimiter
 *      就可以很好地帮助我们“匀速的控制”。

 **/
public class RateLimiterExample
{
   // 定义一个 RateLimiter ,单位时间(默认为秒)的设置为 0.5【访问速率为 0.5 / 秒】
   private static RateLimiter rateLimiter = RateLimiter.create(0.5);

   private static void testRateLimiter()
   {
      // 在访问该方法之前首先要进行 RateLimiter 的获取,返回值为实际的获取等待开销时间
      double acquire = rateLimiter.acquire();
      System.out.println(currentThread() + ": elapsed seconds " + acquire);
   }

   public static void main(String[] args)
   {
      for(;;)
      {
         testRateLimiter();
      }
   }

}

版权声明:本文为lierming__原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。