Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 番石榴_Java_Guava_Throttling - Fatal编程技术网

Java 番石榴

Java 番石榴,java,guava,throttling,Java,Guava,Throttling,我一直在玩thottling系统,偶然发现了番石榴。据我所知,它处理节流的两种主要方式是将超负荷请求排入队列。acquire。。。方法或通过丢弃它们来获取。。。方法 我在想,会有一个选项,允许请求达到指定的数量,并且只有在到达所述限制队列或放弃请求之后 例如: public static void main( String[] args ) { try { RateLimiter limiter = RateLimiter.create(5.0 );

我一直在玩thottling系统,偶然发现了番石榴。据我所知,它处理节流的两种主要方式是将超负荷请求排入队列。acquire。。。方法或通过丢弃它们来获取。。。方法

我在想,会有一个选项,允许请求达到指定的数量,并且只有在到达所述限制队列或放弃请求之后

例如:

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" );
    }
}
这将打印出五声蜂鸣声,省略接下来的五声,然后再次打印五声

我是唯一一个认为这将是一个有用的功能,还是我错过了要点

测试代码由以下人员提供:

这将打印出五声蜂鸣声,省略接下来的五声,然后再次打印五声

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

您正在以每秒10次的固定速率提供输入蜂鸣音, 因此,添加一个5的输入队列只需分摊最初的10次蜂鸣音, 然后,它会每隔一次嘟嘟声就开始跳过,如下所示:

1
2
3
4
5
6
7
8
9
10
12
14
16
18
20
除了这些第一要素之外,这与原始税率限制者将要做的没有什么不同:

1
3
5
7
9
11
13
15
17
19

此外,将队列添加到RateLimiter需要它开始接受异步任务,这听起来不像RateLimiter的自然职责,因此它可能是一个糟糕的设计。

我们不想向它添加固定大小的队列。我只想让它在时间段Y内接受前X个数量的请求。然后根据已经存在的功能忽略或排队接收下一个输入消息。一旦时间间隔勾选完毕,再次接受X并重复。希望它有意义?