Skip to content

Commit cdd62c9

Browse files
author
liufangzhou.aaa
committed
RedisRateLimiter support sharding
1 parent b457d20 commit cdd62c9

File tree

1 file changed

+39
-2
lines changed

1 file changed

+39
-2
lines changed

spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/ratelimit/RedisRateLimiterTests.java

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,26 @@ public void redisRateLimiterWorks() throws Exception {
101101
checkLimitEnforced(id, replenishRate, burstCapacity, requestedTokens, routeId);
102102
}
103103

104+
@RetryingTest(3)
105+
public void redisRateLimiterShardedWorks() throws Exception {
106+
String id = UUID.randomUUID().toString();
107+
108+
int shard = 3;
109+
int replenishRate = 10*shard;
110+
int burstCapacity = 2 * replenishRate;
111+
int requestedTokens = 1;
112+
113+
String routeId = "myroute";
114+
rateLimiter.getConfig()
115+
.put(routeId,
116+
new RedisRateLimiter.Config().setBurstCapacity(burstCapacity)
117+
.setReplenishRate(replenishRate)
118+
.setRequestedTokens(requestedTokens)
119+
.setShards(shard));
120+
121+
checkLimitEnforced(id, replenishRate, burstCapacity, requestedTokens, routeId);
122+
}
123+
104124
@Test
105125
@DisabledIfEnvironmentVariable(named = "GITHUB_ACTIONS", matches = "true")
106126
public void redisRateLimiterWorksForMultipleRoutes() throws Exception {
@@ -166,8 +186,25 @@ public void redisRateLimiterWorksForZeroBurstCapacity() throws Exception {
166186

167187
@Test
168188
public void keysUseRedisKeyHashTags() {
169-
assertThat(RedisRateLimiter.getKeys("1", "routeId", null))
170-
.containsExactly("request_rate_limiter.{routeId.1}.tokens", "request_rate_limiter.{routeId.1}.timestamp");
189+
assertThat(RedisRateLimiter.getKeys("1", "routeId", null)).containsExactly("request_rate_limiter.{routeId.1}.tokens",
190+
"request_rate_limiter.{routeId.1}.timestamp");
191+
}
192+
193+
@Test
194+
public void keysUseRedisKeyHashTagsWithShard() {
195+
assertThat(RedisRateLimiter.getKeys("1", "routeId", "13")).containsExactly(
196+
"request_rate_limiter.{1.routeId.13}.tokens", "request_rate_limiter.{1.routeId.13}.timestamp");
197+
}
198+
199+
@Test
200+
public void redisRateLimiterGetShard() {
201+
int shards = 13;
202+
assertThat(rateLimiter.getShard(0)).isNull();
203+
for (int i = 0; i < 100; i++) {
204+
String shard = rateLimiter.getShard(shards);
205+
assertThat(shard).isNotNull();
206+
assertThat(shard).isEqualTo(String.valueOf(i%shards));
207+
}
171208
}
172209

173210
@Test

0 commit comments

Comments
 (0)