FrameWork/Spring Cloud
Microservice에 Circuitbreaker 적용
태윤2
2021. 9. 11. 23:59
- orderservice를 기동하지 않고 order-service 호출하고 결과
- Resilience4j 주입
- ErrorDecoder 사용부분을 CircuitBreaker로 수정
- user-service에서 order-service를 사용하는 controller 호출
- order-service외의 정보는 표시됨
Circuitbreaker Config 클래스 생성
- Resilience4jConfig class 생성
package com.example.userservice.config;
import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig;
import io.github.resilience4j.timelimiter.TimeLimiterConfig;
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 java.time.Duration;
@Configuration
public class Resilience4jConfig {
@Bean
public Customizer<Resilience4JCircuitBreakerFactory> globalCustomConfiguration() {
CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
// CircuitBreaker 를 열지 결정하는 Failure rate threshold percentage
// default: 50
.failureRateThreshold(4)
// CicuitBreaker 를 open 한 상태를 유지하는 지속 기간을 의미
// 이 기간 이후에 half-open 상태
// default: 60seconds
.waitDurationInOpenState(Duration.ofMillis(1000)) // 1초
// CircuitBreaker 가 닫힐 때 통화 결과를 기록하는 데 사용되는 슬라이딩 창의 유형을 구성
// 카운트 기반 또는 시간 기반
.slidingWindowType(CircuitBreakerConfig.SlidingWindowType.COUNT_BASED) // 기본값 - COUNT_BASED
// CircuitBreaker 가 닫힐 때 호출 결과를 기록하는 데 사용되는 슬라이딩 창의 크기를 구성
// default: 100
.slidingWindowSize(2)
.build();
TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom()
.timeoutDuration(Duration.ofSeconds(4))
.build();
return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
.timeLimiterConfig(timeLimiterConfig)
.circuitBreakerConfig(circuitBreakerConfig)
.build());
}
}