首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >番石榴RateLimiter爆破

番石榴RateLimiter爆破
EN

Stack Overflow用户
提问于 2017-06-02 09:18:43
回答 1查看 1.3K关注 0票数 0

我一直在玩thottling系统,偶然发现了番石榴RateLimiter。据我所知,它处理节流的两种主要方式要么是通过排队处理过多的请求(.acquire(.)方法)或通过丢弃它们(tryAcquire(.)(方法)

我在想,会有一个选项,允许不超过规定数量的请求,只有在达到上述限制队列或丢弃请求之后。

例如:

代码语言:javascript
复制
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提供

EN

回答 1

Stack Overflow用户

发布于 2017-06-02 12:58:38

然后打印出五个蜂鸣声,省略下一个五个,然后再打印五个。

添加一个固定大小的队列并不能使它以这种方式工作。

您正在以每秒10次的固定速率提供输入蜂鸣,因此,添加一个5的输入队列将只摊还初始的10个蜂鸣,然后它将开始跳过其他每一个蜂鸣,如下所示:

代码语言:javascript
复制
1
2
3
4
5
6
7
8
9
10
12
14
16
18
20

这个(除了这些第一个元素)与原始RateLimiter已经做的没有什么不同:

代码语言:javascript
复制
1
3
5
7
9
11
13
15
17
19

此外,向RateLimiter添加队列将要求它开始接受异步任务,这听起来并不像自然的RateLimiter责任,因此很可能会造成错误的设计。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44325219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档