diff --git a/CHANGELOG.md b/CHANGELOG.md
index 64b3ad9f61..b3e204968b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,3 +15,4 @@
- [fix:fix the ratelimit bug for hoxton](https://github.com/Tencent/spring-cloud-tencent/pull/1301)
- [feat:upgrade jacoco version.](https://github.com/Tencent/spring-cloud-tencent/pull/1306)
- [fix:fix no registry when lossless is disabled.](https://github.com/Tencent/spring-cloud-tencent/pull/1313)
+- [fix: memory not released while using wildcard api call with circuitbreaker enabled](https://github.com/Tencent/spring-cloud-tencent/pull/1335)
\ No newline at end of file
diff --git a/spring-cloud-tencent-dependencies/pom.xml b/spring-cloud-tencent-dependencies/pom.xml
index 59894bc377..23180a90dd 100644
--- a/spring-cloud-tencent-dependencies/pom.xml
+++ b/spring-cloud-tencent-dependencies/pom.xml
@@ -74,7 +74,7 @@
1.14.0-Hoxton.SR12-RC3
- 1.15.5
+ 2.0.0.0-SNAPSHOT
32.0.1-jre
diff --git a/spring-cloud-tencent-examples/quickstart-example/quickstart-callee-service-a/src/main/java/com/tencent/cloud/quickstart/callee/QuickstartCalleeController.java b/spring-cloud-tencent-examples/quickstart-example/quickstart-callee-service-a/src/main/java/com/tencent/cloud/quickstart/callee/QuickstartCalleeController.java
index ce586e97a8..a792d5a14a 100644
--- a/spring-cloud-tencent-examples/quickstart-example/quickstart-callee-service-a/src/main/java/com/tencent/cloud/quickstart/callee/QuickstartCalleeController.java
+++ b/spring-cloud-tencent-examples/quickstart-example/quickstart-callee-service-a/src/main/java/com/tencent/cloud/quickstart/callee/QuickstartCalleeController.java
@@ -128,6 +128,17 @@ public String circuitBreak() {
return String.format("Quickstart Callee Service [%s:%s] is called right.", ip, port);
}
+ /**
+ * Check circuit break.
+ *
+ * @return circuit break info
+ */
+ @GetMapping("/circuitBreak/wildcard/{uid}")
+ public String circuitBreakWildcard(@PathVariable String uid) throws InterruptedException {
+ LOG.info("Quickstart Callee Service uid {} [{}:{}] is called right.", uid, ip, port);
+ return String.format("Quickstart Callee Service %s [%s:%s] is called right.", uid, ip, port);
+ }
+
@GetMapping("/faultDetect")
public String health() {
LOG.info("Quickstart Callee Service [{}:{}] is detected right.", ip, port);
diff --git a/spring-cloud-tencent-examples/quickstart-example/quickstart-callee-service-b/src/main/java/com/tencent/cloud/quickstart/callee/QuickstartCalleeController.java b/spring-cloud-tencent-examples/quickstart-example/quickstart-callee-service-b/src/main/java/com/tencent/cloud/quickstart/callee/QuickstartCalleeController.java
index d4de94f3d9..9f923950a2 100644
--- a/spring-cloud-tencent-examples/quickstart-example/quickstart-callee-service-b/src/main/java/com/tencent/cloud/quickstart/callee/QuickstartCalleeController.java
+++ b/spring-cloud-tencent-examples/quickstart-example/quickstart-callee-service-b/src/main/java/com/tencent/cloud/quickstart/callee/QuickstartCalleeController.java
@@ -30,6 +30,7 @@
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@@ -119,6 +120,26 @@ public ResponseEntity circuitBreak() throws InterruptedException {
return new ResponseEntity<>(String.format("Quickstart Callee Service [%s:%s] is called right.", ip, port), HttpStatus.OK);
}
+ /**
+ * Check circuit break.
+ *
+ * @return circuit break info
+ */
+ @GetMapping("/circuitBreak/wildcard/{uid}")
+ public ResponseEntity circuitBreakWildcard(@PathVariable String uid) throws InterruptedException {
+ if (ifBadGateway) {
+ LOG.info("Quickstart Callee Service with uid {} [{}:{}] is called wrong.", uid, ip, port);
+ return new ResponseEntity<>("failed for call quickstart callee service wildcard.", HttpStatus.BAD_GATEWAY);
+ }
+ if (ifDelay) {
+ Thread.sleep(200);
+ LOG.info("Quickstart Callee Service uid {} [{}:{}] is called slow.", uid, ip, port);
+ return new ResponseEntity<>(String.format("Quickstart Callee Service [%s:%s] is called slow.", ip, port), HttpStatus.OK);
+ }
+ LOG.info("Quickstart Callee Service uid {} [{}:{}] is called right.", uid, ip, port);
+ return new ResponseEntity<>(String.format("Quickstart Callee Service %s [%s:%s] is called right.", uid, ip, port), HttpStatus.OK);
+ }
+
@GetMapping("/setBadGateway")
public String setBadGateway(@RequestParam boolean param) {
this.ifBadGateway = param;
diff --git a/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/circuitbreaker/CircuitBreakerController.java b/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/circuitbreaker/CircuitBreakerController.java
index 4d902aaa28..5b348144b2 100644
--- a/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/circuitbreaker/CircuitBreakerController.java
+++ b/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/circuitbreaker/CircuitBreakerController.java
@@ -25,6 +25,7 @@
import org.springframework.cloud.client.circuitbreaker.ReactiveCircuitBreakerFactory;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@@ -84,6 +85,24 @@ public String circuitBreakFeignFallbackFromCode() {
return circuitBreakerQuickstartCalleeServiceWithFallback.circuitBreak();
}
+ /**
+ * Feign circuit breaker with fallback from Polaris.
+ * @return circuit breaker information of callee
+ */
+ @GetMapping("/feign/fallbackFromPolaris/wildcard/{uid}")
+ public String circuitBreakFeignFallbackFromPolarisWildcard(@PathVariable String uid) {
+ return circuitBreakerQuickstartCalleeService.circuitBreakWildcard(uid);
+ }
+
+ /**
+ * Feign circuit breaker with fallback from Polaris.
+ * @return circuit breaker information of callee
+ */
+ @GetMapping("/feign/fallbackFromCode/wildcard/{uid}")
+ public String circuitBreakFeignFallbackFromCodeWildcard(@PathVariable String uid) {
+ return circuitBreakerQuickstartCalleeServiceWithFallback.circuitBreakWildcard(uid);
+ }
+
/**
* RestTemplate circuit breaker.
* @return circuit breaker information of callee
diff --git a/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/circuitbreaker/CircuitBreakerQuickstartCalleeService.java b/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/circuitbreaker/CircuitBreakerQuickstartCalleeService.java
index 64821b9a9a..b960528405 100644
--- a/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/circuitbreaker/CircuitBreakerQuickstartCalleeService.java
+++ b/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/circuitbreaker/CircuitBreakerQuickstartCalleeService.java
@@ -19,6 +19,7 @@
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
/**
* Circuit breaker example callee provider.
@@ -35,4 +36,12 @@ public interface CircuitBreakerQuickstartCalleeService {
*/
@GetMapping("/quickstart/callee/circuitBreak")
String circuitBreak();
+
+ /**
+ * Check circuit break with uid.
+ * @param uid uid variable
+ * @return circuit break info
+ */
+ @GetMapping("/quickstart/callee/circuitBreak/wildcard/{uid}")
+ String circuitBreakWildcard(@PathVariable String uid);
}
diff --git a/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/circuitbreaker/CircuitBreakerQuickstartCalleeServiceFallback.java b/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/circuitbreaker/CircuitBreakerQuickstartCalleeServiceFallback.java
index 06a2df366b..dbc2b9af88 100644
--- a/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/circuitbreaker/CircuitBreakerQuickstartCalleeServiceFallback.java
+++ b/spring-cloud-tencent-examples/quickstart-example/quickstart-caller-service/src/main/java/com/tencent/cloud/quickstart/caller/circuitbreaker/CircuitBreakerQuickstartCalleeServiceFallback.java
@@ -31,4 +31,9 @@ public class CircuitBreakerQuickstartCalleeServiceFallback implements CircuitBre
public String circuitBreak() {
return "fallback: trigger the refuse for service callee.";
}
+
+ @Override
+ public String circuitBreakWildcard(String uid) {
+ return String.format("fallback: trigger the refuse for service callee %s.", uid);
+ }
}
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 f71a7650e3..fe4a9daf8c 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
@@ -19,6 +19,7 @@
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
/**
* CircuitBreakerQuickstartCalleeServiceWithFallback.
@@ -35,4 +36,12 @@ public interface CircuitBreakerQuickstartCalleeServiceWithFallback {
*/
@GetMapping("/quickstart/callee/circuitBreak")
String circuitBreak();
+
+ /**
+ * Check circuit break with uid.
+ * @param uid uid variable
+ * @return circuit break info
+ */
+ @GetMapping("/circuitBreak/wildcard/{uid}")
+ String circuitBreakWildcard(@PathVariable String uid);
}
diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-lossless-plugin/src/test/java/com/tencent/cloud/plugin/lossless/LosslessRegistryAspectTest.java b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-lossless-plugin/src/test/java/com/tencent/cloud/plugin/lossless/LosslessRegistryAspectTest.java
index 45f656529b..6870415401 100644
--- a/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-lossless-plugin/src/test/java/com/tencent/cloud/plugin/lossless/LosslessRegistryAspectTest.java
+++ b/spring-cloud-tencent-plugin-starters/spring-cloud-tencent-lossless-plugin/src/test/java/com/tencent/cloud/plugin/lossless/LosslessRegistryAspectTest.java
@@ -139,7 +139,7 @@ public void testRegister() {
assertThat(OkHttpUtil.checkUrl(HOST, LOSSLESS_PORT_1, "/online", Collections.EMPTY_MAP)).isFalse();
}).doesNotThrowAnyException();
// delay register after 5s
- Thread.sleep(5000);
+ Thread.sleep(10000);
PolarisServiceRegistry registry = context.getBean(PolarisServiceRegistry.class);
PolarisRegistration registration = context.getBean(PolarisRegistration.class);
diff --git a/spring-cloud-tencent-polaris-context/pom.xml b/spring-cloud-tencent-polaris-context/pom.xml
index f525ce672c..972fe0046f 100644
--- a/spring-cloud-tencent-polaris-context/pom.xml
+++ b/spring-cloud-tencent-polaris-context/pom.xml
@@ -49,6 +49,84 @@
+
+ com.tencent.polaris
+ polaris-circuitbreaker-factory
+
+
+ com.tencent.polaris
+ router-rule
+
+
+ com.tencent.polaris
+ router-nearby
+
+
+ com.tencent.polaris
+ router-metadata
+
+
+ com.tencent.polaris
+ circuitbreaker-errrate
+
+
+ com.tencent.polaris
+ circuitbreaker-errcount
+
+
+ com.tencent.polaris
+ circuitbreaker-composite
+
+
+ com.tencent.polaris
+ stat-prometheus
+
+
+ com.tencent.polaris
+ healthchecker-http
+
+
+ com.tencent.polaris
+ healthchecker-tcp
+
+
+ com.tencent.polaris
+ healthchecker-udp
+
+
+
+
+
+ com.tencent.polaris
+ polaris-ratelimit-factory
+
+
+ com.tencent.polaris
+ router-rule
+
+
+ com.tencent.polaris
+ router-nearby
+
+
+ com.tencent.polaris
+ router-metadata
+
+
+ com.tencent.polaris
+ ratelimiter-reject
+
+
+ com.tencent.polaris
+ ratelimiter-unirate
+
+
+ com.tencent.polaris
+ stat-prometheus
+
+
+
+
com.tencent.polaris
polaris-client