diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/pom.xml b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/pom.xml
index 6811c6230..a20045728 100644
--- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/pom.xml
+++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/pom.xml
@@ -20,13 +20,13 @@
- com.tencent.cloud
- spring-cloud-starter-tencent-polaris-discovery
+ org.springframework.boot
+ spring-boot-starter-webflux
com.tencent.cloud
- spring-cloud-starter-tencent-polaris-circuitbreaker
+ spring-cloud-starter-tencent-polaris-discovery
@@ -40,8 +40,8 @@
- org.springframework.cloud
- spring-cloud-circuitbreaker-spring-retry
+ com.tencent.cloud
+ spring-cloud-starter-tencent-polaris-circuitbreaker
diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ProviderB.java b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ProviderB.java
index f0c05217a..7fa0830c6 100644
--- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ProviderB.java
+++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ProviderB.java
@@ -18,6 +18,7 @@
package com.tencent.cloud.polaris.circuitbreaker.example;
import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.context.annotation.Primary;
import org.springframework.web.bind.annotation.GetMapping;
/**
@@ -25,7 +26,8 @@ import org.springframework.web.bind.annotation.GetMapping;
*
* @author Haotian Zhang
*/
-@FeignClient(name = "polaris-circuitbreaker-example-b", fallback = ProviderBFallback.class)
+@Primary
+@FeignClient(name = ProviderBFallbackConstant.SERVICE_NAME, fallback = ProviderBFallback.class)
public interface ProviderB {
/**
@@ -33,6 +35,6 @@ public interface ProviderB {
*
* @return info of service B
*/
- @GetMapping("/example/service/b/info")
+ @GetMapping(ProviderBFallbackConstant.API)
String info();
}
diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ProviderBFallback.java b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ProviderBFallback.java
index bf47d49dd..cb015bbe0 100644
--- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ProviderBFallback.java
+++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ProviderBFallback.java
@@ -29,6 +29,6 @@ public class ProviderBFallback implements ProviderB {
@Override
public String info() {
- return "trigger the refuse for service b";
+ return ProviderBFallbackConstant.FALLBACK_MESSAGE;
}
}
diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ProviderBFallbackConstant.java b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ProviderBFallbackConstant.java
new file mode 100644
index 000000000..3c1f34a66
--- /dev/null
+++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ProviderBFallbackConstant.java
@@ -0,0 +1,10 @@
+package com.tencent.cloud.polaris.circuitbreaker.example;
+
+public class ProviderBFallbackConstant {
+
+ public static final String SERVICE_NAME = "polaris-circuitbreaker-example-b";
+
+ public static final String API = "/example/service/b/info";
+
+ public static final String FALLBACK_MESSAGE = "trigger the refuse for service b";
+}
diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ServiceA.java b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ServiceA.java
index 3db7df8f3..12876cf95 100644
--- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ServiceA.java
+++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ServiceA.java
@@ -24,6 +24,8 @@ import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
+import org.springframework.web.reactive.function.client.WebClient;
+import org.springframework.web.util.DefaultUriBuilderFactory;
/**
* Circuit breaker example caller application.
@@ -41,6 +43,16 @@ public class ServiceA {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
- return new RestTemplate();
+ DefaultUriBuilderFactory uriBuilderFactory = new DefaultUriBuilderFactory("http://" + ProviderBFallbackConstant.SERVICE_NAME);
+ RestTemplate restTemplate = new RestTemplate();
+ restTemplate.setUriTemplateHandler(uriBuilderFactory);
+ return restTemplate;
+ }
+
+ @LoadBalanced
+ @Bean
+ WebClient.Builder webClientBuilder() {
+ return WebClient.builder()
+ .baseUrl("http://" + ProviderBFallbackConstant.SERVICE_NAME);
}
}
diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ServiceAController.java b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ServiceAController.java
index 79ba2c0ef..b22c7dd8c 100644
--- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ServiceAController.java
+++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/java/com/tencent/cloud/polaris/circuitbreaker/example/ServiceAController.java
@@ -17,12 +17,17 @@
package com.tencent.cloud.polaris.circuitbreaker.example;
+import reactor.core.publisher.Mono;
+
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory;
+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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
+import org.springframework.web.reactive.function.client.WebClient;
/**
* Circuit breaker example caller controller.
@@ -39,6 +44,15 @@ public class ServiceAController {
@Autowired
private RestTemplate restTemplate;
+ @Autowired
+ private ReactiveCircuitBreakerFactory reactiveCircuitBreakerFactory;
+
+ @Autowired
+ private CircuitBreakerFactory circuitBreakerFactory;
+
+ @Autowired
+ private WebClient.Builder webClientBuilder;
+
/**
* Get info of Service B by Feign.
* @return info of Service B
@@ -48,9 +62,34 @@ public class ServiceAController {
return polarisServiceB.info();
}
+ @GetMapping("/getBServiceInfoByRestTemplate1")
+ public String getBServiceInfoByRestTemplate1() {
+ return restTemplate.getForObject(ProviderBFallbackConstant.API, String.class);
+ }
+
@GetMapping("/getBServiceInfoByRestTemplate")
public String getBServiceInfoByRestTemplate() {
- return restTemplate.getForObject("http://polaris-circuitbreaker-example-b/example/service/b/info", String.class);
+ return circuitBreakerFactory
+ .create(ProviderBFallbackConstant.SERVICE_NAME)
+ .run(() ->
+ restTemplate.getForObject(ProviderBFallbackConstant.API, String.class),
+ throwable -> ProviderBFallbackConstant.FALLBACK_MESSAGE
+ );
+ }
+
+ @GetMapping("/getBServiceInfoByWebClient")
+ public Mono getBServiceInfoByWebClient() {
+ return webClientBuilder
+ .build()
+ .get()
+ .uri(ProviderBFallbackConstant.API)
+ .retrieve()
+ .bodyToMono(String.class)
+ .transform(it ->
+ reactiveCircuitBreakerFactory
+ .create(ProviderBFallbackConstant.SERVICE_NAME)
+ .run(it, throwable -> Mono.just(ProviderBFallbackConstant.FALLBACK_MESSAGE))
+ );
}
/**
@@ -64,4 +103,5 @@ public class ServiceAController {
String.class);
return entity.getBody();
}
+
}
diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/resources/bootstrap.yml
index de8c607b2..1010c99b2 100644
--- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/resources/bootstrap.yml
+++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-a/src/main/resources/bootstrap.yml
@@ -5,7 +5,7 @@ spring:
name: polaris-circuitbreaker-example-a
cloud:
polaris:
- address: grpc://183.47.111.80:8091
+ address: grpc://127.0.0.1:8091
namespace: default
enabled: true
circuitbreaker:
@@ -36,3 +36,8 @@ feign:
serivceB:
url: http://localhost:48081
+logging:
+ level:
+ root: info
+ com.tencent.cloud: debug
+
diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-b/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-b/src/main/resources/bootstrap.yml
index d6945b5b4..dfdcb3bb9 100644
--- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-b/src/main/resources/bootstrap.yml
+++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-b/src/main/resources/bootstrap.yml
@@ -5,7 +5,7 @@ spring:
name: polaris-circuitbreaker-example-b
cloud:
polaris:
- address: grpc://183.47.111.80:8091
+ address: grpc://127.0.0.1:8091
namespace: default
enabled: true
stat:
diff --git a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-b2/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-b2/src/main/resources/bootstrap.yml
index 5ef89145c..240710181 100644
--- a/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-b2/src/main/resources/bootstrap.yml
+++ b/spring-cloud-tencent-examples/polaris-circuitbreaker-example/polaris-circuitbreaker-example-b2/src/main/resources/bootstrap.yml
@@ -5,7 +5,7 @@ spring:
name: polaris-circuitbreaker-example-b
cloud:
polaris:
- address: grpc://183.47.111.80:8091
+ address: grpc://127.0.0.1:8091
namespace: default
enabled: true
stat: