inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Users Microservice에 CircuitBreaker 적용

설정 정보가 다른 CircuitBreaker 사용하는 방법

561

slr과르

작성한 질문수 10

1

안녕하세요.

강의 잘 듣고 있습니다.

 

예제에서 Resilience4jConfig를 통해 CircuitBreaker에 대한 설정을 하여 사용하는 것으로 확인을 했습니다.

MSA를 연동하는 서비스에 따라 CircuitBreaker에 대한 설정 값을 다르게하여 복수개를 사용하는 경우도 있을 것 같은데, 이럴 경우 Resilience4JConfig에 대한 Bean 등록과 Config 를 어떻게 잡으면 될까요?

감사합니다.

Kafka msa spring-boot architecture JPA spring-cloud

답변 1

4

Dowon Lee

안녕하세요, 이도원입니다. 

문의하신 작업은 여러개의 Customizer<Resilience4JCircuitBreakerFactory>를 등록함으로써 가능합니다. 

기존에 만든 Resilience4JConfig 파일에 CircuitBreakerFactory를 아래와 같이 여러 개 등록하실 수 있습니다. 

@Bean
public Customizer<Resilience4JCircuitBreakerFactory> specificCustomConfiguration1() {
CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
.failureRateThreshold(6).waitDurationInOpenState(Duration.ofMillis(1000))
.slidingWindowType(CircuitBreakerConfig.SlidingWindowType.COUNT_BASED)
.slidingWindowSize(3).build();

TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom()
.timeoutDuration(Duration.ofSeconds(4)).build();

return factory -> factory.configure(builder -> builder.circuitBreakerConfig(circuitBreakerConfig)
.timeLimiterConfig(timeLimiterConfig).build(), "circuitBreaker1");
}

@Bean
public Customizer<Resilience4JCircuitBreakerFactory> specificCustomConfiguration2() {
CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
.failureRateThreshold(8).waitDurationInOpenState(Duration.ofMillis(1000))
.slidingWindowType(CircuitBreakerConfig.SlidingWindowType.COUNT_BASED)
.slidingWindowSize(4).build();

TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom()
.timeoutDuration(Duration.ofSeconds(4)).build();

return factory -> factory.configure(builder -> builder.circuitBreakerConfig(circuitBreakerConfig)
.timeLimiterConfig(timeLimiterConfig).build(),
"circuitBreaker2");
}

위 코드를 보시면, CircuitBreakerFactory를 circuitBreaker1, circuitBreaker2 로 등록한 것을 보실 수있습니다. 각각 다른 설정을 가지고 생성되었으면, UserServiceImpl.java 에서 사용하실 때는

CircuitBreaker circuitBreaker = circuitBreakerFactory.create("circuitBreaker1");
CircuitBreaker circuitBreaker2 = circuitBreakerFactory.create("circuitBreaker2");

위와 같이 create() 함수에서 등록한 ID(circuitBreaker1, circuitBreaker2)를 이용하여  CircuitBreaker 객체를 생성하실 수 있습니다. 

감사합니다. 

kafka 업데이트 강의 듣고 시포요

0

85

1

강의 교안

0

73

1

마이크로서비스간 통신 시, 인증 처리

0

79

1

api gateway 에서 인증 처리

0

66

1

섹션 19 질문드립니다

0

53

1

강의 자료 업데이트

0

83

1

부하분산 강의 섹션

0

57

1

강의자료는 어디에서?

0

71

1

강의 자료는 어디서 다운 받을 수 있나요?

0

110

1

전체 사용자 조회시 오류

0

58

1

혹시 pk 외 별도의 id 를 부여한 이유가 있을까요 ??

0

112

2

학습 방향

0

95

2

카프카 커넥터 사용 목적 문의

0

86

2

kafka 강의

0

108

2

서비스 디스커버리 종류

0

87

2

강의 자료에 대해서 궁금해요

0

116

2

GlobalFilter, LoggingFilter가 동작하지 않습니다.

0

90

2

Kafka Source Connect 버전 에러

0

85

2

소스커넥터는 사용안한 거 맞죠?

0

81

2

강의자료 업데이트 문의

0

95

2

강의에서 BCryptPasswordEncoder 에 역할(5-2)

0

56

1

강의 업데이트 계획이 궁금합니다.

0

112

2

MSA 애플리케이션에 Spring Web과 Spring Data JPA를 사용하는 것이 바람직한지 궁금합니다. (MSA 설계와 관련된 질문입니다)

0

161

2

어떤 것이 업데이트 된 건가요?

0

164

2