fix: memory not released while using wildcard api call with circuitbreaker (#1361)

* fix: memory not released while using wildcard api call with circuitbreaker enabled

* fix: change version 1.13.3-Hoxton.SR12-SNAPSHOT

* fix: update polaris verion to 1.15.9 release

* Update CHANGELOG.md
pull/1390/merge
andrew shan 1 year ago committed by GitHub
parent 91bc164ad1
commit c4eca72bb6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -22,3 +22,4 @@
- [fix:fix sct-all wrong spring boot version obtain.](https://github.com/Tencent/spring-cloud-tencent/pull/1204) - [fix:fix sct-all wrong spring boot version obtain.](https://github.com/Tencent/spring-cloud-tencent/pull/1204)
- fix:fix restTemplateCustomizer bean conflict causing service to fail to start properly. - fix:fix restTemplateCustomizer bean conflict causing service to fail to start properly.
- fix:fix NullPointerException when properties contain kv with null value. - fix:fix NullPointerException when properties contain kv with null value.
- [fix: memory not released while using wildcard api call with circuitbreaker](https://github.com/Tencent/spring-cloud-tencent/pull/1361)

@ -90,7 +90,7 @@
<properties> <properties>
<!-- Project revision --> <!-- Project revision -->
<revision>1.13.1-Hoxton.SR12</revision> <revision>1.13.3-Hoxton.SR12-SNAPSHOT</revision>
<!-- Spring Framework --> <!-- Spring Framework -->
<spring.framework.version>5.2.25.RELEASE</spring.framework.version> <spring.framework.version>5.2.25.RELEASE</spring.framework.version>

@ -70,10 +70,10 @@
</developers> </developers>
<properties> <properties>
<revision>1.13.1-Hoxton.SR12</revision> <revision>1.13.3-Hoxton.SR12-SNAPSHOT</revision>
<!-- Dependencies --> <!-- Dependencies -->
<polaris.version>1.15.0</polaris.version> <polaris.version>1.15.9</polaris.version>
<guava.version>32.0.1-jre</guava.version> <guava.version>32.0.1-jre</guava.version>
<logback.version>1.2.13</logback.version> <logback.version>1.2.13</logback.version>
<springfox.swagger2.version>3.0.0</springfox.swagger2.version> <springfox.swagger2.version>3.0.0</springfox.swagger2.version>

@ -28,6 +28,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping; 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.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
@ -106,6 +107,17 @@ public class QuickstartCalleeController {
return String.format("Quickstart Callee Service [%s:%s] is called right.", ip, port); 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") @GetMapping("/faultDetect")
public String health() { public String health() {
LOG.info("Quickstart Callee Service [{}:{}] is detected right.", ip, port); LOG.info("Quickstart Callee Service [{}:{}] is detected right.", ip, port);

@ -30,6 +30,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; 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.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
@ -119,6 +120,26 @@ public class QuickstartCalleeController {
return new ResponseEntity<>(String.format("Quickstart Callee Service [%s:%s] is called right.", ip, port), HttpStatus.OK); 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<String> 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") @GetMapping("/setBadGateway")
public String setBadGateway(@RequestParam boolean param) { public String setBadGateway(@RequestParam boolean param) {
this.ifBadGateway = param; this.ifBadGateway = param;

@ -25,6 +25,7 @@ import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory;
import org.springframework.cloud.client.circuitbreaker.ReactiveCircuitBreakerFactory; import org.springframework.cloud.client.circuitbreaker.ReactiveCircuitBreakerFactory;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; 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.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
@ -84,6 +85,24 @@ public class CircuitBreakerController {
return circuitBreakerQuickstartCalleeServiceWithFallback.circuitBreak(); 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. * RestTemplate circuit breaker.
* @return circuit breaker information of callee * @return circuit breaker information of callee

@ -19,6 +19,7 @@ package com.tencent.cloud.quickstart.caller.circuitbreaker;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
/** /**
* Circuit breaker example callee provider. * Circuit breaker example callee provider.
@ -35,4 +36,12 @@ public interface CircuitBreakerQuickstartCalleeService {
*/ */
@GetMapping("/quickstart/callee/circuitBreak") @GetMapping("/quickstart/callee/circuitBreak")
String 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);
} }

@ -31,4 +31,9 @@ public class CircuitBreakerQuickstartCalleeServiceFallback implements CircuitBre
public String circuitBreak() { public String circuitBreak() {
return "fallback: trigger the refuse for service callee."; 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);
}
} }

@ -19,6 +19,7 @@ package com.tencent.cloud.quickstart.caller.circuitbreaker;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
/** /**
* CircuitBreakerQuickstartCalleeServiceWithFallback. * CircuitBreakerQuickstartCalleeServiceWithFallback.
@ -35,4 +36,12 @@ public interface CircuitBreakerQuickstartCalleeServiceWithFallback {
*/ */
@GetMapping("/quickstart/callee/circuitBreak") @GetMapping("/quickstart/callee/circuitBreak")
String 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);
} }

@ -49,6 +49,84 @@
</exclusions> </exclusions>
</dependency> </dependency>
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>polaris-circuitbreaker-factory</artifactId>
<exclusions>
<exclusion>
<groupId>com.tencent.polaris</groupId>
<artifactId>router-rule</artifactId>
</exclusion>
<exclusion>
<groupId>com.tencent.polaris</groupId>
<artifactId>router-nearby</artifactId>
</exclusion>
<exclusion>
<groupId>com.tencent.polaris</groupId>
<artifactId>router-metadata</artifactId>
</exclusion>
<exclusion>
<groupId>com.tencent.polaris</groupId>
<artifactId>circuitbreaker-errrate</artifactId>
</exclusion>
<exclusion>
<groupId>com.tencent.polaris</groupId>
<artifactId>circuitbreaker-errcount</artifactId>
</exclusion>
<exclusion>
<groupId>com.tencent.polaris</groupId>
<artifactId>circuitbreaker-composite</artifactId>
</exclusion>
<exclusion>
<groupId>com.tencent.polaris</groupId>
<artifactId>stat-prometheus</artifactId>
</exclusion>
<exclusion>
<groupId>com.tencent.polaris</groupId>
<artifactId>healthchecker-http</artifactId>
</exclusion>
<exclusion>
<groupId>com.tencent.polaris</groupId>
<artifactId>healthchecker-tcp</artifactId>
</exclusion>
<exclusion>
<groupId>com.tencent.polaris</groupId>
<artifactId>healthchecker-udp</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>polaris-ratelimit-factory</artifactId>
<exclusions>
<exclusion>
<groupId>com.tencent.polaris</groupId>
<artifactId>router-rule</artifactId>
</exclusion>
<exclusion>
<groupId>com.tencent.polaris</groupId>
<artifactId>router-nearby</artifactId>
</exclusion>
<exclusion>
<groupId>com.tencent.polaris</groupId>
<artifactId>router-metadata</artifactId>
</exclusion>
<exclusion>
<groupId>com.tencent.polaris</groupId>
<artifactId>ratelimiter-reject</artifactId>
</exclusion>
<exclusion>
<groupId>com.tencent.polaris</groupId>
<artifactId>ratelimiter-unirate</artifactId>
</exclusion>
<exclusion>
<groupId>com.tencent.polaris</groupId>
<artifactId>stat-prometheus</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency> <dependency>
<groupId>com.tencent.polaris</groupId> <groupId>com.tencent.polaris</groupId>
<artifactId>polaris-client</artifactId> <artifactId>polaris-client</artifactId>

Loading…
Cancel
Save