diff --git a/CHANGELOG.md b/CHANGELOG.md index 81e1ef49d..a8e03bfc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,3 +11,4 @@ - [fix: prepend context-path to contract reporter API paths](https://github.com/Tencent/spring-cloud-tencent/pull/1803) - [feat: support overrideHost configuration for ratelimit, event reporter and stat modules](https://github.com/Tencent/spring-cloud-tencent/pull/1804) - [fix: split contract base-package for springdoc scan](https://github.com/Tencent/spring-cloud-tencent/pull/1807) +- [feat: support using seperated cb in wildcard-api level and add cb counters expire interval config](https://github.com/Tencent/spring-cloud-tencent/pull/1809) diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/common/CircuitBreakerConfigModifier.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/common/CircuitBreakerConfigModifier.java index 3e3cc5782..a5a458be9 100644 --- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/common/CircuitBreakerConfigModifier.java +++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/common/CircuitBreakerConfigModifier.java @@ -69,6 +69,8 @@ public class CircuitBreakerConfigModifier implements PolarisConfigModifier { .setDefaultInterval(polarisCircuitBreakerProperties.getDefaultInterval()); configuration.getConsumer().getCircuitBreaker() .setDefaultMinimumRequest(polarisCircuitBreakerProperties.getDefaultMinimumRequest()); + configuration.getConsumer().getCircuitBreaker() + .setCountersExpireInterval(polarisCircuitBreakerProperties.getCountersExpireInterval()); } @Override diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/config/PolarisCircuitBreakerProperties.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/config/PolarisCircuitBreakerProperties.java index 882de3077..65e2bbd4d 100644 --- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/config/PolarisCircuitBreakerProperties.java +++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/config/PolarisCircuitBreakerProperties.java @@ -64,6 +64,11 @@ public class PolarisCircuitBreakerProperties { */ private int defaultMinimumRequest = 10; + /** + * Counters expire interval for circuit-breaker, unit millisecond. 0 means never expire. Default is 0. + */ + private long countersExpireInterval = 300000; + public boolean isEnabled() { return enabled; } @@ -120,6 +125,14 @@ public class PolarisCircuitBreakerProperties { this.defaultMinimumRequest = defaultMinimumRequest; } + public long getCountersExpireInterval() { + return countersExpireInterval; + } + + public void setCountersExpireInterval(long countersExpireInterval) { + this.countersExpireInterval = countersExpireInterval; + } + @Override public String toString() { return "PolarisCircuitBreakerProperties{" + @@ -130,6 +143,7 @@ public class PolarisCircuitBreakerProperties { ", defaultErrorPercent=" + defaultErrorPercent + ", defaultInterval=" + defaultInterval + ", defaultMinimumRequest=" + defaultMinimumRequest + + ", countersExpireInterval=" + countersExpireInterval + '}'; } } diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/resources/META-INF/additional-spring-configuration-metadata.json index e3f55af7a..3423810d5 100644 --- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -41,6 +41,12 @@ "type": "java.lang.Integer", "defaultValue": 10, "description": "Error rate circuit-breaker default minimum request." + }, + { + "name": "spring.cloud.polaris.circuitbreaker.counters-expire-interval", + "type": "java.lang.Long", + "defaultValue": 0, + "description": "Counters expire interval for circuit-breaker, unit millisecond. 0 means never expire." } ], "hints": [] diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/config/PolarisCircuitBreakerPropertiesTest.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/config/PolarisCircuitBreakerPropertiesTest.java index ca4f28b01..3cc83ef0b 100644 --- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/config/PolarisCircuitBreakerPropertiesTest.java +++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/test/java/com/tencent/cloud/polaris/circuitbreaker/config/PolarisCircuitBreakerPropertiesTest.java @@ -41,7 +41,8 @@ public class PolarisCircuitBreakerPropertiesTest { .withPropertyValues("spring.cloud.polaris.circuitbreaker.default-error-count=1") .withPropertyValues("spring.cloud.polaris.circuitbreaker.default-error-percent=2") .withPropertyValues("spring.cloud.polaris.circuitbreaker.default-interval=3") - .withPropertyValues("spring.cloud.polaris.circuitbreaker.default-minimum-request=4"); + .withPropertyValues("spring.cloud.polaris.circuitbreaker.default-minimum-request=4") + .withPropertyValues("spring.cloud.polaris.circuitbreaker.counters-expire-interval=60000"); @Test public void testDefaultInitialization() { @@ -53,6 +54,7 @@ public class PolarisCircuitBreakerPropertiesTest { assertThat(polarisCircuitBreakerProperties.getDefaultErrorPercent()).isEqualTo(2); assertThat(polarisCircuitBreakerProperties.getDefaultInterval()).isEqualTo(3); assertThat(polarisCircuitBreakerProperties.getDefaultMinimumRequest()).isEqualTo(4); + assertThat(polarisCircuitBreakerProperties.getCountersExpireInterval()).isEqualTo(60000); }); } diff --git a/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/circuitbreaker/CircuitBreakerQuickstartCalleeServiceWithFallback.java b/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/circuitbreaker/CircuitBreakerQuickstartCalleeServiceWithFallback.java index 714e307b6..20d297a87 100644 --- a/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/circuitbreaker/CircuitBreakerQuickstartCalleeServiceWithFallback.java +++ b/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/circuitbreaker/CircuitBreakerQuickstartCalleeServiceWithFallback.java @@ -42,6 +42,6 @@ public interface CircuitBreakerQuickstartCalleeServiceWithFallback { * @param uid uid variable * @return circuit break info */ - @GetMapping("/circuitBreak/wildcard/{uid}") + @GetMapping("/quickstart/callee/circuitBreak/wildcard/{uid}") String circuitBreakWildcard(@PathVariable String uid); }