diff --git a/spring-cloud/spring-cloud-circuit-breaker/README.md b/spring-cloud/spring-cloud-circuit-breaker/README.md
new file mode 100644
index 0000000000..040eb0ccee
--- /dev/null
+++ b/spring-cloud/spring-cloud-circuit-breaker/README.md
@@ -0,0 +1,5 @@
+## Spring Cloud Circuit Breaker
+
+This module contains articles about Spring Cloud Circuit Breaker
+
+### Relevant Articles:
diff --git a/spring-cloud/spring-cloud-circuit-breaker/pom.xml b/spring-cloud/spring-cloud-circuit-breaker/pom.xml
new file mode 100644
index 0000000000..188fc4bf8e
--- /dev/null
+++ b/spring-cloud/spring-cloud-circuit-breaker/pom.xml
@@ -0,0 +1,55 @@
+
+
+ 4.0.0
+ spring-cloud-circuit-breaker
+ spring-cloud-gateway
+ jar
+
+
+ com.baeldung.spring.cloud
+ spring-cloud
+ 1.0.0-SNAPSHOT
+ ..
+
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/libs-snapshot
+
+ true
+
+
+ false
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ 2.2.4.RELEASE
+ pom
+ import
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-circuitbreaker-resilience4j
+ 1.0.2.RELEASE
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
diff --git a/spring-cloud/spring-cloud-circuit-breaker/src/main/java/com/baeldung/circuitbreaker/AlbumService.java b/spring-cloud/spring-cloud-circuit-breaker/src/main/java/com/baeldung/circuitbreaker/AlbumService.java
new file mode 100644
index 0000000000..67163c8c9a
--- /dev/null
+++ b/spring-cloud/spring-cloud-circuit-breaker/src/main/java/com/baeldung/circuitbreaker/AlbumService.java
@@ -0,0 +1,40 @@
+package com.baeldung.circuitbreaker;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.client.circuitbreaker.CircuitBreaker;
+import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+@Service
+public class AlbumService {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(AlbumService.class);
+
+ @Autowired
+ private CircuitBreakerFactory circuitBreakerFactory;
+
+ private RestTemplate restTemplate = new RestTemplate();
+
+ public String getAlbumList() {
+ CircuitBreaker circuitBreaker = circuitBreakerFactory.create("circuitbreaker");
+ String url = "https://jsonplaceholder.typicode.com/albums";
+
+ return circuitBreaker.run(() -> restTemplate.getForObject(url, String.class), throwable -> getDefaultAlbumList());
+ }
+
+ private String getDefaultAlbumList() {
+ try {
+ return new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource("fallback-album-list.json").toURI())));
+ } catch (Exception e) {
+ LOGGER.error("error occurred while reading the file", e);
+ }
+ return null;
+ }
+
+}
diff --git a/spring-cloud/spring-cloud-circuit-breaker/src/main/java/com/baeldung/circuitbreaker/Controller.java b/spring-cloud/spring-cloud-circuit-breaker/src/main/java/com/baeldung/circuitbreaker/Controller.java
new file mode 100644
index 0000000000..10f7c57a7a
--- /dev/null
+++ b/spring-cloud/spring-cloud-circuit-breaker/src/main/java/com/baeldung/circuitbreaker/Controller.java
@@ -0,0 +1,18 @@
+package com.baeldung.circuitbreaker;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class Controller {
+
+ @Autowired
+ private AlbumService service;
+
+ @GetMapping("/albums")
+ public String albums() {
+ return service.getAlbumList();
+ }
+
+}
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-circuit-breaker/src/main/java/com/baeldung/circuitbreaker/SpringApp.java b/spring-cloud/spring-cloud-circuit-breaker/src/main/java/com/baeldung/circuitbreaker/SpringApp.java
new file mode 100644
index 0000000000..f891e7693f
--- /dev/null
+++ b/spring-cloud/spring-cloud-circuit-breaker/src/main/java/com/baeldung/circuitbreaker/SpringApp.java
@@ -0,0 +1,71 @@
+package com.baeldung.circuitbreaker;
+
+import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig;
+import io.github.resilience4j.timelimiter.TimeLimiterConfig;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+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 java.time.Duration;
+
+@SpringBootApplication
+public class SpringApp {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SpringApp.class, args);
+ }
+
+ @Bean
+ public Customizer globalCustomConfiguration() {
+ TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom()
+ .timeoutDuration(Duration.ofSeconds(4))
+ .build();
+ CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
+ .failureRateThreshold(50)
+ .waitDurationInOpenState(Duration.ofMillis(1000))
+ .slidingWindowSize(2)
+ .build();
+
+ return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
+ .timeLimiterConfig(timeLimiterConfig)
+ .circuitBreakerConfig(circuitBreakerConfig)
+ .build());
+ }
+
+ @Bean
+ public Customizer specificCustomConfiguration1() {
+
+ TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom()
+ .timeoutDuration(Duration.ofSeconds(4))
+ .build();
+ CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
+ .failureRateThreshold(50)
+ .waitDurationInOpenState(Duration.ofMillis(1000))
+ .slidingWindowSize(2)
+ .build();
+
+ return factory -> factory.configure(builder -> builder.circuitBreakerConfig(circuitBreakerConfig)
+ .timeLimiterConfig(timeLimiterConfig).build(), "circuitBreaker");
+ }
+
+ @Bean
+ public Customizer specificCustomConfiguration2() {
+
+ TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom()
+ .timeoutDuration(Duration.ofSeconds(4))
+ .build();
+ CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
+ .failureRateThreshold(50)
+ .waitDurationInOpenState(Duration.ofMillis(1000))
+ .slidingWindowSize(2)
+ .build();
+
+ return factory -> factory.configure(builder -> builder.circuitBreakerConfig(circuitBreakerConfig)
+ .timeLimiterConfig(timeLimiterConfig).build(),
+ "circuitBreaker1", "circuitBreaker2", "circuitBreaker3");
+ }
+
+}
diff --git a/spring-cloud/spring-cloud-circuit-breaker/src/main/resources/fallback-album-list.json b/spring-cloud/spring-cloud-circuit-breaker/src/main/resources/fallback-album-list.json
new file mode 100644
index 0000000000..001df7610a
--- /dev/null
+++ b/spring-cloud/spring-cloud-circuit-breaker/src/main/resources/fallback-album-list.json
@@ -0,0 +1,12 @@
+[
+ {
+ "userId": 1,
+ "id": 1,
+ "title": "quidem molestiae enim"
+ },
+ {
+ "userId": 1,
+ "id": 2,
+ "title": "sunt qui excepturi placeat culpa"
+ }
+]
\ No newline at end of file