AutowiredRateLimitor以意外的速率进行限制

smdncfj3  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(184)

我正在使用Spring自动连线一个速率限制器,并观察到速率限制器没有或油门在预期的速度。相反,如果我使用ratelimiter.create,它将以预期的速率进行限制。

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

import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:spring-configuration/unit-testing-config.xml"})
public class RateLimiterTest {

    @Autowired
    @Qualifier("rateLimiterHash")
    private RateLimiter rateLimiter;

    @BeforeClass
    public static void initConfig() {
        //some initialization
    }

    @Test
    public void testRateLimiter() {
        //RateLimiter rateLimiter = RateLimiter.create(1);
        Assert.assertEquals(rateLimiter.getRate(), 1.0f, 0.0f);
        Assert.assertTrue(rateLimiter.tryAcquire());
        Assert.assertFalse(rateLimiter.tryAcquire()); //FAILS
    }

}

在unit-testing-config.xml中:

<bean id="rateLimiterHash" class="com.google.common.util.concurrent.RateLimiter"
        factory-method="create">
        <constructor-arg value="1"/>
</bean>

它允许第二个请求通过,即使使用spring将速率配置为1tps。如果我使用 RateLimiter.create ,测试通过。我很困惑。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题