我正在使用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
,测试通过。我很困惑。
暂无答案!
目前还没有任何答案,快来回答吧!