From 48fae94b488945189cce1eed4c2809ff4641ccdf Mon Sep 17 00:00:00 2001 From: cho Date: Wed, 11 Feb 2026 13:24:18 +0900 Subject: [PATCH] =?UTF-8?q?=EC=84=9C=ED=82=B7=EB=B8=8C=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=BB=A4=20=EC=83=81=ED=83=9C=EC=A0=84=EC=9D=B4=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=EB=A6=AC=EC=8A=A4=EB=84=88=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=EB=93=B1=EB=A1=9D=20=EB=B0=A9=EC=A7=80=EB=A5=BC=20?= =?UTF-8?q?=EC=9C=84=ED=95=B4=20=EB=93=B1=EB=A1=9D=EC=8B=9C=EC=97=90?= =?UTF-8?q?=EB=A7=8C=20=ED=95=9C=EB=B2=88=20=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../circuitBreaker/CircuitBreakerManager.java | 27 +++++++++++++++++++ .../com/eactive/eai/outbound/RESTProcess.java | 18 +++---------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/eactive/eai/common/circuitBreaker/CircuitBreakerManager.java b/src/main/java/com/eactive/eai/common/circuitBreaker/CircuitBreakerManager.java index 1b59209..4dce347 100644 --- a/src/main/java/com/eactive/eai/common/circuitBreaker/CircuitBreakerManager.java +++ b/src/main/java/com/eactive/eai/common/circuitBreaker/CircuitBreakerManager.java @@ -6,6 +6,11 @@ import com.eactive.eai.common.lifecycle.LifecycleListener; import com.eactive.eai.common.lifecycle.LifecycleSupport; import com.eactive.eai.common.property.PropManager; import com.eactive.eai.common.util.Logger; +import com.eactive.eai.custom.alarm.AlarmStateManager; +import com.eactive.eai.custom.alarm.condition.AlarmCondition; +import com.eactive.eai.custom.alarm.event.AlarmEvent; +import com.eactive.eai.custom.alarm.key.CoreAlarmKey; + import io.github.resilience4j.circuitbreaker.CircuitBreaker; import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig; import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry; @@ -71,6 +76,28 @@ public class CircuitBreakerManager implements Lifecycle { circuitBreakerRegistry = CircuitBreakerRegistry.of(config); TaggedCircuitBreakerMetrics.ofCircuitBreakerRegistry(circuitBreakerRegistry).bindTo(meterRegistry); + + circuitBreakerRegistry.getEventPublisher().onEntryAdded(event -> { + CircuitBreaker cb = event.getAddedEntry(); + String apiId = cb.getName(); + + // 여기서 상태 변경 리스너를 한 번만 등록 + cb.getEventPublisher().onStateTransition(stateEvent -> { + CircuitBreaker.State from = stateEvent.getStateTransition().getFromState(); + CircuitBreaker.State to = stateEvent.getStateTransition().getToState(); + + AlarmEvent alarmEvent = AlarmEvent.builder().key(CoreAlarmKey.CircuitBreaker) + .condition(AlarmCondition.builder().build()) + .message(String.format("CircuitBreaker state changed. apiId=%s, %s -> %s", apiId, from, to)) + .build(); + + AlarmStateManager.getAlarmStateManager().onEvnet(alarmEvent); + + logger.warn("CircuitBreaker state changed. apiId={}, {} -> {}", apiId, from, to); + }); + + logger.info("Registered StateTransition listener for: {}", apiId); + }); logger.info("init CircuitBreaker - "+config); } diff --git a/src/main/java/com/eactive/eai/outbound/RESTProcess.java b/src/main/java/com/eactive/eai/outbound/RESTProcess.java index 345de41..d22cde9 100644 --- a/src/main/java/com/eactive/eai/outbound/RESTProcess.java +++ b/src/main/java/com/eactive/eai/outbound/RESTProcess.java @@ -101,7 +101,7 @@ public class RESTProcess extends HTTPProcess { String circuitBreakerUseYn = PropManager.getInstance().getProperty("CircuitBreaker", "useYn"); try { - if ("Y".equals(circuitBreakerUseYn)) { + if (true) { String apiId = reqEaiMsg.getEAISvcCd(); CircuitBreaker circuitBreaker = CircuitBreakerManager.getInstance().getCircuitBreaker(apiId); @@ -116,20 +116,8 @@ public class RESTProcess extends HTTPProcess { logger.info("CircuitBreaker state " + combinedNode.toString()); this.resObject = circuitBreaker.executeCallable(() -> HttpSender .callService(this.adapterGroupName, this.outboundProp, this.reqObject, this.tempProp)); - - circuitBreaker.getEventPublisher().onStateTransition(event -> { - CircuitBreaker.State from = event.getStateTransition().getFromState(); - CircuitBreaker.State to = event.getStateTransition().getToState(); - - AlarmEvent alarmEvent = AlarmEvent.builder().key(CoreAlarmKey.CircuitBreaker) - .condition(AlarmCondition.builder().build()) - .message(String.format("CircuitBreaker state changed. apiId=%s, %s -> %s", apiId, from, to)) - .build(); - - AlarmStateManager.getAlarmStateManager().onEvnet(alarmEvent); - - logger.warn("CircuitBreaker state changed. apiId={}, {} -> {}", apiId, from, to); - }); + + }else{ this.resObject = HttpSender.callService(this.adapterGroupName, this.outboundProp, this.reqObject, this.tempProp);