-
Spring - Resilience4j circuit breaker exampleSpring 2024. 1. 9. 22:20반응형
Resilience4j는 내결함성(fault tolerance) 라이브러리다.
Netflix Hystrix는 더이상 개발되지 않아 Resilience4j 사용을 권장하고 있습니다.
Resilience4j는 다음과 같은 모듈을 제공합니다.
- circuitbreaker
- ratelimiter
- bulkhead
- retry
- timelimiter
- cache
CircuitBreaker Config
import io.github.resilience4j.circuitbreaker.CircuitBreaker; import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.time.Duration; @Configuration public class CircuitBreakerConfig { @Bean public CircuitBreaker circuitBreaker() { CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom() .failureRateThreshold(50) // Threshold for opening the circuit .waitDurationInOpenState(Duration.ofMillis(1000)) // Time the circuit will stay open before resetting .build(); return CircuitBreaker.of("myCircuitBreaker", circuitBreakerConfig); } }
- failureRateThreshold: 실패율 임계값(백분율)
- waitDurationInOpenState: circuitbreaker가 OPEN에서 HALF_OPEN으로 전환하기 전 대기 시간
호출 예제
import org.springframework.stereotype.Service; import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker; @Service public class MyService { @CircuitBreaker(name = "customCircuitBreaker", fallbackMethod = "callFallback") public String riskyServiceCall() { // Code that might fail or take too long // For example, an external API call return "Service Response"; } public String callFallback(Throwable t) { // This method is called if riskyServiceCall fails return "Fallback Response"; } }
build.gradle 파일
plugins { id 'org.springframework.boot' version '2.6.3' // Replace with your Spring Boot version id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' // Replace with your Java version repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' // Resilience4j dependency for Spring Boot implementation 'io.github.resilience4j:resilience4j-spring-boot2:1.7.1' // Replace with the latest version // If you need additional Resilience4j modules, add them here. For example: // implementation 'io.github.resilience4j:resilience4j-circuitbreaker:1.7.1' // implementation 'io.github.resilience4j:resilience4j-ratelimiter:1.7.1' // implementation 'io.github.resilience4j:resilience4j-bulkhead:1.7.1' // implementation 'io.github.resilience4j:resilience4j-retry:1.7.1' testImplementation 'org.springframework.boot:spring-boot-starter-test' } test { useJUnitPlatform() }
반응형'Spring' 카테고리의 다른 글
Spring - JPA on duplicate key update (MySQL) (0) 2024.02.13 Spring - JPA Entity에서 @Column 필드 리스트로 만들기 (0) 2024.02.13 Spring - JPA Executing an update/delete query 에러 (0) 2023.10.17 Spring - JPA @OneToMany java.lang.StackOverflowError: null (0) 2022.11.04 Spring - JPA cannot simultaneously fetch multiple bags (0) 2022.11.04