I am trying to implement circuit breaker pattern in my spring boot application. I am referring to https://redhat-scholars.github.io/spring-boot-k8s-tutorial/spring-boot-tutorial/05-resiliency.html this tutorial. I am getting above error. Not sure what point I am missing.
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.cloud.circuitbreaker.resilience4j.Resilience4JCircuitBreakerFactory;
import org.springframework.cloud.circuitbreaker.resilience4j.Resilience4JConfigBuilder;
import org.springframework.cloud.client.circuitbreaker.Customizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig;
import io.github.resilience4j.timelimiter.TimeLimiterConfig;
@Configuration
public class CircuitBreakerConfiguration {
private CircuitBreakerConfig circuitBreakerConfig() {
return CircuitBreakerConfig.custom()
.failureRateThreshold(2)
.waitDurationInOpenState(Duration.ofMillis(1000))
.slidingWindowSize(2)
.build();
}
// Create a Customizer<Resilience4JCircuitBreakerFactory> bean to configure the Resilience4JCircuitBreakerFactory
@Bean
@ConditionalOnMissingBean
public Customizer<Resilience4JCircuitBreakerFactory> resilience4jCircuitBreakerCustomizer() {
return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
.circuitBreakerConfig(circuitBreakerConfig())
.timeLimiterConfig(timeLimiterConfig())
.build());
}
private TimeLimiterConfig timeLimiterConfig() {
TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom()
.timeoutDuration(Duration.ofSeconds(4))
.build();
return timeLimiterConfig;
}
Few of the dependencies
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-starter-config'
implementation 'org.springframework.cloud:spring-cloud-starter-circuitbreaker-resilience4j:2.0.2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.kafka:spring-kafka'
implementation 'io.github.resilience4j:resilience4j-spring-boot2:1.7.0'
implementation 'io.github.resilience4j:resilience4j-circuitbreaker:1.7.0'
implementation 'io.github.resilience4j:resilience4j-consumer:1.7.0'
implementation 'io.github.resilience4j:resilience4j-core:1.7.0'
implementation 'io.github.resilience4j:resilience4j-spring:1.7.0'
implementation 'io.github.resilience4j:resilience4j-annotations:1.7.0'
implementation 'io.github.resilience4j:resilience4j-timelimiter:1.7.0'
Using constructor injection I am trying to inject bean into my class
private CircuitBreaker circuitBreaker;
public ProductEventConsumer(Resilience4JCircuitBreakerFactory circuitBreakerFactory) {
this.circuitBreaker = circuitBreakerFactory.create("circuitbreaker");
}