feat: support config ratelimit addresses and remote task interval (#1714)

Co-authored-by: Fishtail <49390359+fuyuwei01@users.noreply.github.com>
pull/1717/head
Haotian Zhang 3 weeks ago committed by GitHub
parent 17d141b4b6
commit 52cfba6039
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -20,3 +20,4 @@
- [fix:replace HttpClient with HttpURLConnection for JDK 8 compatibility.](https://github.com/Tencent/spring-cloud-tencent/pull/1709)
- [feat:Modify the annotations.](https://github.com/Tencent/spring-cloud-tencent/pull/1712)
- [fix: polaris.discovery.heartbeat.enabled not effective.](https://github.com/Tencent/spring-cloud-tencent/pull/1713)
- [feat: support config ratelimit addresses and remote task interval.](https://github.com/Tencent/spring-cloud-tencent/pull/1714)

@ -48,6 +48,18 @@ public class PolarisRateLimitProperties {
*/
private long maxQueuingTime = 1000L;
private String limiterAddresses;
private long remoteTaskInterval = 30L;
String getLimiterAddresses() {
return limiterAddresses;
}
void setLimiterAddresses(String limiterAddresses) {
this.limiterAddresses = limiterAddresses;
}
public String getRejectRequestTips() {
return rejectRequestTips;
}
@ -79,4 +91,12 @@ public class PolarisRateLimitProperties {
public void setMaxQueuingTime(long maxQueuingTime) {
this.maxQueuingTime = maxQueuingTime;
}
public long getRemoteTaskInterval() {
return remoteTaskInterval;
}
public void setRemoteTaskInterval(long remoteTaskInterval) {
this.remoteTaskInterval = remoteTaskInterval;
}
}

@ -18,6 +18,7 @@
package com.tencent.cloud.polaris.ratelimit.config;
import com.tencent.cloud.common.constant.OrderConstant;
import com.tencent.cloud.common.util.AddressUtils;
import com.tencent.cloud.polaris.context.PolarisConfigModifier;
import com.tencent.polaris.factory.config.ConfigurationImpl;
@ -39,6 +40,9 @@ public class RateLimitConfigModifier implements PolarisConfigModifier {
// Update MaxQueuingTime.
configuration.getProvider().getRateLimit()
.setMaxQueuingTime(polarisRateLimitProperties.getMaxQueuingTime());
configuration.getProvider().getRateLimit()
.setLimiterAddresses(AddressUtils.parseHostPortList(polarisRateLimitProperties.getLimiterAddresses()));
configuration.getProvider().getRateLimit().setRemoteTaskIntervalMilli(polarisRateLimitProperties.getRemoteTaskInterval());
}
@Override

@ -29,6 +29,17 @@
"type": "java.lang.Long",
"defaultValue": "1000",
"description": "Max queuing time when using unirate."
},
{
"name": "spring.cloud.polaris.ratelimit.limiterAddresses",
"type": "java.lang.String",
"description": "Remote limiter service addresses."
},
{
"name": "spring.cloud.polaris.ratelimit.remoteTaskInterval",
"type": "java.lang.Long",
"defaultValue": "30",
"description": "Remote limiter service task base interval. Unit: ms."
}
]
}

@ -0,0 +1,63 @@
/*
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
*
* Copyright (C) 2021 Tencent. All rights reserved.
*
* Licensed under the BSD 3-Clause License (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://opensource.org/licenses/BSD-3-Clause
*
* Unless required by applicable law or agreed to in writing, software distributed
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/
package com.tencent.cloud.polaris.ratelimit.config;
import com.tencent.cloud.polaris.context.PolarisSDKContextManager;
import com.tencent.polaris.api.config.provider.RateLimitConfig;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import static org.assertj.core.api.Assertions.assertThat;
public class PolarisRateLimitConfigModifierTest {
private final ApplicationContextRunner applicationContextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(TestApplication.class))
.withPropertyValues("spring.cloud.polaris.ratelimit.maxQueuingTime=500")
.withPropertyValues("spring.cloud.polaris.ratelimit.limiterAddresses=127.0.0.1:8080,127.0.0.1:8081")
.withPropertyValues("spring.cloud.polaris.ratelimit.remoteTaskInterval=50");
@BeforeEach
void setUp() {
PolarisSDKContextManager.innerDestroy();
}
@Test
public void testModify() {
this.applicationContextRunner.run(context -> {
PolarisSDKContextManager polarisSDKContextManager = context.getBean(PolarisSDKContextManager.class);
RateLimitConfig config = polarisSDKContextManager.getSDKContext().
getConfig().getProvider().getRateLimit();
assertThat(config.isEnable()).isTrue();
assertThat(config.getLimiterAddresses().get(0)).isEqualTo("127.0.0.1:8080");
assertThat(config.getLimiterAddresses().get(1)).isEqualTo("127.0.0.1:8081");
assertThat(config.getMaxQueuingTime()).isEqualTo(500);
assertThat(config.getRemoteTaskIntervalMilli()).isEqualTo(50);
});
}
@SpringBootApplication
protected static class TestApplication {
}
}

@ -17,6 +17,9 @@
package com.tencent.cloud.polaris.ratelimit.config;
import java.util.List;
import com.tencent.cloud.common.util.AddressUtils;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@ -48,6 +51,10 @@ public class PolarisRateLimitPropertiesTest {
assertThat(polarisRateLimitProperties.getRejectRequestTipsFilePath()).isEqualTo("/index.html");
assertThat(polarisRateLimitProperties.getRejectHttpCode()).isEqualTo(419);
assertThat(polarisRateLimitProperties.getMaxQueuingTime()).isEqualTo(500L);
assertThat(polarisRateLimitProperties.getRemoteTaskInterval()).isEqualTo(50L);
List<String> limiterAddresses = AddressUtils.parseHostPortList(polarisRateLimitProperties.getLimiterAddresses());
assertThat(limiterAddresses.get(0)).isEqualTo("127.0.0.1:8080");
}
@SpringBootApplication

@ -2,3 +2,5 @@ spring.cloud.polaris.ratelimit.rejectRequestTips=xxx
spring.cloud.polaris.ratelimit.rejectRequestTipsFilePath=/index.html
spring.cloud.polaris.ratelimit.rejectHttpCode=419
spring.cloud.polaris.ratelimit.maxQueuingTime=500
spring.cloud.polaris.ratelimit.remoteTaskInterval=50
spring.cloud.polaris.ratelimit.limiterAddresses=127.0.0.1:8080,127.0.0.1:8081

Loading…
Cancel
Save