diff --git a/fizz-bootstrap/pom.xml b/fizz-bootstrap/pom.xml
index d9de446..3d80999 100644
--- a/fizz-bootstrap/pom.xml
+++ b/fizz-bootstrap/pom.xml
@@ -63,11 +63,11 @@
${project.version}
-->
-
+
org.springframework.cloud
spring-cloud-context
diff --git a/fizz-core/pom.xml b/fizz-core/pom.xml
index 39c12d5..4544227 100644
--- a/fizz-core/pom.xml
+++ b/fizz-core/pom.xml
@@ -155,6 +155,11 @@
spring-cloud-starter-alibaba-nacos-discovery
+
+ org.springframework.cloud
+ spring-cloud-starter-circuitbreaker-reactor-resilience4j
+
+
org.springframework.boot
spring-boot-configuration-processor
diff --git a/fizz-core/src/main/java/we/config/FizzWebClientConfig.java b/fizz-core/src/main/java/we/config/FizzWebClientConfig.java
new file mode 100644
index 0000000..a4cf612
--- /dev/null
+++ b/fizz-core/src/main/java/we/config/FizzWebClientConfig.java
@@ -0,0 +1,75 @@
+package we.config;
+
+import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig;
+import io.github.resilience4j.timelimiter.TimeLimiterConfig;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.cloud.circuitbreaker.resilience4j.ReactiveResilience4JCircuitBreakerFactory;
+import org.springframework.cloud.circuitbreaker.resilience4j.Resilience4JConfigBuilder;
+import org.springframework.cloud.client.circuitbreaker.Customizer;
+import org.springframework.cloud.client.loadbalancer.reactive.ReactorLoadBalancerExchangeFilterFunction;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.reactive.function.client.WebClient;
+import reactor.core.publisher.Mono;
+import we.Fizz;
+
+import javax.annotation.Resource;
+import java.time.Duration;
+
+//@Configuration
+public class FizzWebClientConfig {
+
+ /*public static final String FIZZ_LOAD_BALANCED_WEB_CLIENT = "fizzLoadBalancedWebClient";
+
+ @Bean(FIZZ_LOAD_BALANCED_WEB_CLIENT)
+ public WebClient LoadBalancedWebClient(@Qualifier(ProxyWebClientConfig.proxyWebClient) WebClient sourceWebClient,
+ ReactorLoadBalancerExchangeFilterFunction reactorLoadBalancerExchangeFilterFunction) {
+
+ return sourceWebClient.mutate().filter(reactorLoadBalancerExchangeFilterFunction).build();
+ }*/
+
+ // disable the Resilience4J auto-configuration spring.cloud.circuitbreaker.resilience4j.enabled = false
+
+ /*@Bean
+ public Customizer defaultCustomizer() {
+ return factory -> factory.configureDefault(
+ id -> new Resilience4JConfigBuilder(id)
+ .circuitBreakerConfig(CircuitBreakerConfig.ofDefaults())
+ .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(4)).build())
+ .build()
+ );
+ }*/
+
+ /*@Bean
+ public Customizer slowCustomizer() {
+ return factory -> {
+ factory.configure(
+ builder -> builder
+ .circuitBreakerConfig(CircuitBreakerConfig.ofDefaults())
+ .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(2)).build()),
+ "slow", "slowflux"
+ );
+ factory.addCircuitBreakerCustomizer(
+ Customizer.once(
+ circuitBreaker -> circuitBreaker.getEventPublisher()
+ .onError(null) // normalFluxErrorConsumer
+ .onSuccess(null), // normalFluxSuccessConsumer
+ circuitBreaker -> circuitBreaker.getName()
+ ),
+ "normalflux"
+ );
+ };
+ }*/
+
+ /*@Resource
+ private ReactiveResilience4JCircuitBreakerFactory reactiveResilience4JCircuitBreakerFactory;
+
+ public void x() {
+ WebClient webClient = (WebClient) Fizz.context.getBean(ProxyWebClientConfig.proxyWebClient);
+ webClient.get().uri("/slow").retrieve().bodyToMono(String.class)
+ .transform(
+ stringMono -> reactiveResilience4JCircuitBreakerFactory.create("slow")
+ .run(stringMono, throwable -> Mono.just("fallback"))
+ );
+ }*/
+}
diff --git a/pom.xml b/pom.xml
index 3a117f5..5550fb3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -236,6 +236,12 @@
+
+ org.springframework.cloud
+ spring-cloud-starter-circuitbreaker-reactor-resilience4j
+ 1.0.6.RELEASE
+
+
org.springframework.cloud
spring-cloud-context