Skip to content

Commit dbe4fe5

Browse files
feat:upgrade api circuit breaker. (#1441)
* feat:upgrade api circuit breaker. * feat:upgrade api circuit breaker. * update junit test.
1 parent 8006975 commit dbe4fe5

File tree

77 files changed

+1679
-2693
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+1679
-2693
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,4 @@
2929
- [fix:fix contract reporting bug when using TSF.](https://github.com/Tencent/spring-cloud-tencent/pull/1406)
3030
- [fix: fix PolarisCircuitBreakerConfiguration not clear when gateway invoke by wildcard apis](https://github.com/Tencent/spring-cloud-tencent/pull/1425)
3131
- [fix:fix actuator name warning from #1428 .](https://github.com/Tencent/spring-cloud-tencent/pull/1432)
32+
- [feat:upgrade api circuit breaker.](https://github.com/Tencent/spring-cloud-tencent/pull/1441)

spring-cloud-starter-tencent-polaris-circuitbreaker/pom.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,6 @@
118118
<scope>test</scope>
119119
</dependency>
120120

121-
<dependency>
122-
<groupId>org.springframework.cloud</groupId>
123-
<artifactId>spring-cloud-starter-contract-stub-runner</artifactId>
124-
<scope>test</scope>
125-
</dependency>
126-
127121
<dependency>
128122
<groupId>com.tencent.polaris</groupId>
129123
<artifactId>polaris-test-common</artifactId>

spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/PolarisCircuitBreaker.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ public class PolarisCircuitBreaker implements CircuitBreaker {
5252
public PolarisCircuitBreaker(PolarisCircuitBreakerConfigBuilder.PolarisCircuitBreakerConfiguration conf,
5353
ConsumerAPI consumerAPI,
5454
CircuitBreakAPI circuitBreakAPI) {
55-
FunctionalDecoratorRequest makeDecoratorRequest = new FunctionalDecoratorRequest(new ServiceKey(conf.getNamespace(), conf.getService()), conf.getMethod());
55+
FunctionalDecoratorRequest makeDecoratorRequest = new FunctionalDecoratorRequest(
56+
new ServiceKey(conf.getNamespace(), conf.getService()), conf.getProtocol(), conf.getMethod(), conf.getPath());
5657
makeDecoratorRequest.setSourceService(new ServiceKey(conf.getSourceNamespace(), conf.getSourceService()));
5758
makeDecoratorRequest.setResultToErrorCode(new PolarisResultToErrorCode());
5859
this.consumerAPI = consumerAPI;

spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/PolarisCircuitBreakerFactory.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,24 +43,25 @@
4343
public class PolarisCircuitBreakerFactory
4444
extends CircuitBreakerFactory<PolarisCircuitBreakerConfigBuilder.PolarisCircuitBreakerConfiguration, PolarisCircuitBreakerConfigBuilder> implements DisposableBean {
4545

46+
private final CircuitBreakAPI circuitBreakAPI;
47+
48+
private final ConsumerAPI consumerAPI;
49+
50+
private final ScheduledExecutorService cleanupService = Executors.newSingleThreadScheduledExecutor(
51+
new NamedThreadFactory("sct-circuitbreaker-cleanup", true));
52+
4653
private Function<String, PolarisCircuitBreakerConfigBuilder.PolarisCircuitBreakerConfiguration> defaultConfiguration =
4754
id -> {
4855
String[] metadata = PolarisCircuitBreakerUtils.resolveCircuitBreakerId(id);
4956
return new PolarisCircuitBreakerConfigBuilder()
5057
.namespace(metadata[0])
5158
.service(metadata[1])
52-
.method(metadata[2])
59+
.path(metadata[2])
60+
.protocol(metadata[3])
61+
.method(metadata[4])
5362
.build();
5463
};
5564

56-
57-
private final CircuitBreakAPI circuitBreakAPI;
58-
59-
private final ConsumerAPI consumerAPI;
60-
61-
private final ScheduledExecutorService cleanupService = Executors.newSingleThreadScheduledExecutor(
62-
new NamedThreadFactory("sct-circuitbreaker-cleanup", true));
63-
6465
public PolarisCircuitBreakerFactory(CircuitBreakAPI circuitBreakAPI, ConsumerAPI consumerAPI,
6566
PolarisCircuitBreakerProperties polarisCircuitBreakerProperties) {
6667
this.circuitBreakAPI = circuitBreakAPI;
@@ -83,7 +84,7 @@ public CircuitBreaker create(String id) {
8384
@Override
8485
protected PolarisCircuitBreakerConfigBuilder configBuilder(String id) {
8586
String[] metadata = PolarisCircuitBreakerUtils.resolveCircuitBreakerId(id);
86-
return new PolarisCircuitBreakerConfigBuilder(metadata[0], metadata[1], metadata[2]);
87+
return new PolarisCircuitBreakerConfigBuilder(metadata[0], metadata[1], metadata[2], metadata[3], metadata[4]);
8788
}
8889

8990
@Override
@@ -93,7 +94,7 @@ public void configureDefault(Function<String, PolarisCircuitBreakerConfigBuilder
9394

9495
@Override
9596
public void destroy() {
96-
ThreadPoolUtils.waitAndStopThreadPools(new ExecutorService[]{cleanupService});
97+
ThreadPoolUtils.waitAndStopThreadPools(new ExecutorService[] {cleanupService});
9798
}
9899

99100
}

spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/ReactivePolarisCircuitBreaker.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ public class ReactivePolarisCircuitBreaker implements ReactiveCircuitBreaker {
5151
public ReactivePolarisCircuitBreaker(PolarisCircuitBreakerConfigBuilder.PolarisCircuitBreakerConfiguration conf,
5252
ConsumerAPI consumerAPI,
5353
CircuitBreakAPI circuitBreakAPI) {
54-
InvokeContext.RequestContext requestContext = new FunctionalDecoratorRequest(new ServiceKey(conf.getNamespace(), conf.getService()), conf.getMethod());
54+
InvokeContext.RequestContext requestContext = new FunctionalDecoratorRequest(
55+
new ServiceKey(conf.getNamespace(), conf.getService()), conf.getProtocol(), conf.getMethod(), conf.getPath());
5556
requestContext.setSourceService(new ServiceKey(conf.getSourceNamespace(), conf.getSourceService()));
5657
requestContext.setResultToErrorCode(new PolarisResultToErrorCode());
5758
this.consumerAPI = consumerAPI;

spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/ReactivePolarisCircuitBreakerFactory.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,23 +43,25 @@
4343
public class ReactivePolarisCircuitBreakerFactory extends
4444
ReactiveCircuitBreakerFactory<PolarisCircuitBreakerConfigBuilder.PolarisCircuitBreakerConfiguration, PolarisCircuitBreakerConfigBuilder> implements DisposableBean {
4545

46+
private final CircuitBreakAPI circuitBreakAPI;
47+
48+
private final ConsumerAPI consumerAPI;
49+
50+
private final ScheduledExecutorService cleanupService = Executors.newSingleThreadScheduledExecutor(
51+
new NamedThreadFactory("sct-reactive-circuitbreaker-cleanup", true));
52+
4653
private Function<String, PolarisCircuitBreakerConfigBuilder.PolarisCircuitBreakerConfiguration> defaultConfiguration =
4754
id -> {
4855
String[] metadata = PolarisCircuitBreakerUtils.resolveCircuitBreakerId(id);
4956
return new PolarisCircuitBreakerConfigBuilder()
5057
.namespace(metadata[0])
5158
.service(metadata[1])
52-
.method(metadata[2])
59+
.path(metadata[2])
60+
.protocol(metadata[3])
61+
.method(metadata[4])
5362
.build();
5463
};
5564

56-
private final CircuitBreakAPI circuitBreakAPI;
57-
58-
private final ConsumerAPI consumerAPI;
59-
60-
private final ScheduledExecutorService cleanupService = Executors.newSingleThreadScheduledExecutor(
61-
new NamedThreadFactory("sct-reactive-circuitbreaker-cleanup", true));
62-
6365
public ReactivePolarisCircuitBreakerFactory(CircuitBreakAPI circuitBreakAPI, ConsumerAPI consumerAPI,
6466
PolarisCircuitBreakerProperties polarisCircuitBreakerProperties) {
6567
this.circuitBreakAPI = circuitBreakAPI;
@@ -82,7 +84,7 @@ public ReactiveCircuitBreaker create(String id) {
8284
@Override
8385
protected PolarisCircuitBreakerConfigBuilder configBuilder(String id) {
8486
String[] metadata = PolarisCircuitBreakerUtils.resolveCircuitBreakerId(id);
85-
return new PolarisCircuitBreakerConfigBuilder(metadata[0], metadata[1], metadata[2]);
87+
return new PolarisCircuitBreakerConfigBuilder(metadata[0], metadata[1], metadata[2], metadata[3], metadata[4]);
8688
}
8789

8890
@Override
@@ -93,6 +95,6 @@ public void configureDefault(
9395

9496
@Override
9597
public void destroy() {
96-
ThreadPoolUtils.waitAndStopThreadPools(new ExecutorService[]{cleanupService});
98+
ThreadPoolUtils.waitAndStopThreadPools(new ExecutorService[] {cleanupService});
9799
}
98100
}

spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/common/PolarisCircuitBreakerConfigBuilder.java

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,21 @@ public class PolarisCircuitBreakerConfigBuilder implements ConfigBuilder<Polaris
3232

3333
private String service;
3434

35+
private String protocol;
36+
3537
private String method;
3638

39+
private String path;
40+
3741
public PolarisCircuitBreakerConfigBuilder() {
3842

3943
}
4044

41-
public PolarisCircuitBreakerConfigBuilder(String namespace, String service, String method) {
45+
public PolarisCircuitBreakerConfigBuilder(String namespace, String service, String path, String protocol, String method) {
4246
this.namespace = namespace;
4347
this.service = service;
48+
this.path = path;
49+
this.protocol = protocol;
4450
this.method = method;
4551
}
4652

@@ -54,17 +60,29 @@ public PolarisCircuitBreakerConfigBuilder service(String service) {
5460
return this;
5561
}
5662

63+
public PolarisCircuitBreakerConfigBuilder protocol(String protocol) {
64+
this.protocol = protocol;
65+
return this;
66+
}
67+
5768
public PolarisCircuitBreakerConfigBuilder method(String method) {
5869
this.method = method;
5970
return this;
6071
}
6172

73+
public PolarisCircuitBreakerConfigBuilder path(String path) {
74+
this.path = path;
75+
return this;
76+
}
77+
6278
@Override
6379
public PolarisCircuitBreakerConfiguration build() {
6480
PolarisCircuitBreakerConfiguration conf = new PolarisCircuitBreakerConfiguration();
6581
conf.setNamespace(namespace);
6682
conf.setService(service);
83+
conf.setProtocol(protocol);
6784
conf.setMethod(method);
85+
conf.setPath(path);
6886
return conf;
6987
}
7088

@@ -78,8 +96,12 @@ public static class PolarisCircuitBreakerConfiguration {
7896

7997
private String service;
8098

99+
private String protocol;
100+
81101
private String method;
82102

103+
private String path;
104+
83105
public String getNamespace() {
84106
return namespace;
85107
}
@@ -96,6 +118,14 @@ public void setService(String service) {
96118
this.service = service;
97119
}
98120

121+
public String getProtocol() {
122+
return protocol;
123+
}
124+
125+
public void setProtocol(String protocol) {
126+
this.protocol = protocol;
127+
}
128+
99129
public String getMethod() {
100130
return method;
101131
}
@@ -104,6 +134,14 @@ public void setMethod(String method) {
104134
this.method = method;
105135
}
106136

137+
public String getPath() {
138+
return path;
139+
}
140+
141+
public void setPath(String path) {
142+
this.path = path;
143+
}
144+
107145
public String getSourceNamespace() {
108146
return sourceNamespace;
109147
}

spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisCircuitBreakerNameResolver.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,16 @@
2222
import java.net.URISyntaxException;
2323

2424
import com.tencent.cloud.common.metadata.MetadataContext;
25+
import com.tencent.polaris.api.utils.CollectionUtils;
26+
import com.tencent.polaris.api.utils.StringUtils;
27+
import feign.Request;
2528
import feign.Target;
2629
import org.slf4j.Logger;
2730
import org.slf4j.LoggerFactory;
2831

2932
import org.springframework.cloud.openfeign.CircuitBreakerNameResolver;
30-
import org.springframework.util.StringUtils;
3133
import org.springframework.web.bind.annotation.RequestMapping;
34+
import org.springframework.web.bind.annotation.RequestMethod;
3235

3336
import static org.springframework.core.annotation.AnnotatedElementUtils.findMergedAnnotation;
3437

@@ -47,7 +50,7 @@ public String resolveCircuitBreakerName(String feignClientName, Target<?> target
4750
String path = "";
4851

4952
// Get path in @FeignClient.
50-
if (StringUtils.hasText(target.url())) {
53+
if (StringUtils.isNotBlank(target.url())) {
5154
URI uri = null;
5255
try {
5356
uri = new URI(target.url());
@@ -60,16 +63,24 @@ public String resolveCircuitBreakerName(String feignClientName, Target<?> target
6063
}
6164
}
6265

63-
// Get path in @RequestMapping.
66+
// Get path and method in @RequestMapping.
6467
RequestMapping requestMapping = findMergedAnnotation(method, RequestMapping.class);
68+
String httpMethod = Request.HttpMethod.GET.name();
6569
if (requestMapping != null) {
6670
path += requestMapping.path().length == 0 ?
6771
requestMapping.value().length == 0 ? "" : requestMapping.value()[0] :
6872
requestMapping.path()[0];
73+
74+
RequestMethod[] requestMethods = requestMapping.method();
75+
if (CollectionUtils.isNotEmpty(requestMethods)) {
76+
httpMethod = requestMethods[0].name();
77+
}
6978
}
70-
return "".equals(path) ?
79+
80+
81+
return StringUtils.isBlank(path) ?
7182
MetadataContext.LOCAL_NAMESPACE + "#" + serviceName :
72-
MetadataContext.LOCAL_NAMESPACE + "#" + serviceName + "#" + path;
83+
MetadataContext.LOCAL_NAMESPACE + "#" + serviceName + "#" + path + "#http#" + httpMethod;
7384
}
7485

7586
}

0 commit comments

Comments
 (0)