【发布时间】:2017-11-03 15:30:25
【问题描述】:
我一直在使用 thottling 系统,偶然发现了 Guava RateLimiter。据我所知,它处理节流的两种主要方式是对溢出的请求进行排队(.acquire(...) 方法)或丢弃它们(tryAcquire(...) 方法)
我在想会有一个选项允许请求达到指定数量,并且仅在达到所述限制队列或丢弃请求之后。
例如:
public static void main( String[] args )
{
try
{
RateLimiter limiter = RateLimiter.create(5.0 );
//fictive call not saying it should be implemented this way
limiter.allowBursts(true);
for( int i = 0; i < 20; i++ )
{
Thread.sleep( 100 );
performOperation( limiter );
}
}
catch( InterruptedException e )
{
e.printStackTrace();
}
}
private static void performOperation( RateLimiter limiter )
{
if( limiter.tryAcquire() )
{
System.out.println( Instant.now() + ": Beep" );
}
}
这将打印出五声哔哔声,省略接下来的五声,然后再次打印五声
我是唯一一个认为这将是一个有用的功能的人,还是我没有抓住重点?
测试代码由: Throttling method calls using Guava RateLimiter class
【问题讨论】:
标签: java guava throttling