기존에 feign을 resilience4j와 사용하면서 생긴 이슈
1. 클라이언트 인터페이스와 연결된 실제 서버에서 응답의 이슈가 있었음(DecodeException)
2. 해당 오류는 에러디코드에서 제대로 해석되지 않았기에,서킷에서 무시하지 않고 집계됨
3. 해당 영향으로 연결된 서비스가 정상적인 상태임에도 불구하고, 서킷이 오픈됨
4. 결과적으로 연결된 전체 서비스의 요청에 폴백으로 넘어감
@Bean
fun feignDecorator(
circuitBreakerRegistry: CircuitBreakerRegistry,
): FeignDecorator {
val circuitBreakerConfig = CircuitBreakerConfig.from(circuitBreakerRegistry.defaultConfig)
.ignoreException { throwable ->
if (throwable is CustomClientException) {
throwable.code != -1
} else {
false
}
}
.build()
val circuitBreaker = circuitBreakerRegistry.circuitBreaker("clientCircuit", circuitBreakerConfig)
return FeignDecorators.builder()
.withCircuitBreaker(circuitBreaker)
.withFallbackFactory {
ClientFallbackFactory().create(it)
}
.build()
}
@Bean
fun clientBuilder(
feignDecorator: FeignDecorator,
): Feign.Builder {
return Feign.builder()
.client(ApacheHttp5Client())
.options(feignRequestOptions())
.addCapability(Resilience4jFeign.capability(feignDecorator))
}
변경사항
1. 의도했든 안했든, 연결된 서비스의 응답이 이슈는 있으나, 이게 서킷에 영향을 줄만한 사항은 아님
2. 해당 오류 발생시 서킷에서 무시할 수 있도록 수정
@Bean
fun feignDecorator(
circuitBreakerRegistry: CircuitBreakerRegistry,
): FeignDecorator {
val circuitBreakerConfig = CircuitBreakerConfig.from(circuitBreakerRegistry.defaultConfig)
.ignoreException { throwable ->
when (throwable) {
is CustomClientException -> {
throwable.code != -1
}
is DecodeException -> {
true
}
else -> false
}
}
.build()
val circuitBreaker = circuitBreakerRegistry.circuitBreaker("clientCircuit", circuitBreakerConfig)
return FeignDecorators.builder()
.withCircuitBreaker(circuitBreaker)
.withFallbackFactory {
ClientFallbackFactory().create(it)
}
.build()
}
@Bean
fun clientBuilder(
feignDecorator: FeignDecorator,
): Feign.Builder {
return Feign.builder()
.client(ApacheHttp5Client())
.options(feignRequestOptions())
.addCapability(Resilience4jFeign.capability(feignDecorator))
}
이렇게 또 운영이슈를 하나 얻어가는구나
'프로그래밍 > 자바' 카테고리의 다른 글
Java, Call By Value? Call By Reference? (0) | 2024.08.10 |
---|---|
[기록] Spring mockMvc test securityRequirements type (0) | 2024.03.17 |
Virtual Thread & Hikari & Semaphore (1) | 2024.02.21 |
얼마나 좋아~~ JDK21 & Spring boot 3.2 Virtual Thread (2) | 2024.02.12 |
Java, Spring, 다형성 (0) | 2023.01.18 |