From 22477dc9bded7883bd128705fab73fb2797d4e0e Mon Sep 17 00:00:00 2001 From: "semin.baek" Date: Tue, 2 Sep 2025 19:49:03 +0900 Subject: [PATCH] =?UTF-8?q?=EC=97=90=EC=9D=B4=EC=A0=84=ED=8A=B8-=EC=BD=98?= =?UTF-8?q?=EC=86=94=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=86=A1=EC=88=98?= =?UTF-8?q?=EC=8B=A0=20=EB=A1=9C=EC=A7=81=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsmlab/dfx/agent/listener/dto/AckDto.java | 4 ++- .../agent/listener/dto/ReceiveMessageDto.java | 1 + .../listener/service/ListenerService.java | 8 ++---- .../dfx/agent/support/MessageUtils.java | 26 ++++++++++++++++--- .../task/postman/PostmanSchedulerService.java | 21 ++++++++------- 5 files changed, 40 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/bsmlab/dfx/agent/listener/dto/AckDto.java b/src/main/java/com/bsmlab/dfx/agent/listener/dto/AckDto.java index 3350d2c..0b1a647 100644 --- a/src/main/java/com/bsmlab/dfx/agent/listener/dto/AckDto.java +++ b/src/main/java/com/bsmlab/dfx/agent/listener/dto/AckDto.java @@ -27,6 +27,8 @@ public class AckDto { RECEIVE_SUCCESS, RECEIVE_FAIL, PROCESS_SUCCESS, - PROCESS_FAIL + PROCESS_FAIL, + TRANSFER_SUCCESS, + TRANSFER_FAIL } } diff --git a/src/main/java/com/bsmlab/dfx/agent/listener/dto/ReceiveMessageDto.java b/src/main/java/com/bsmlab/dfx/agent/listener/dto/ReceiveMessageDto.java index 36ff060..1851e0e 100644 --- a/src/main/java/com/bsmlab/dfx/agent/listener/dto/ReceiveMessageDto.java +++ b/src/main/java/com/bsmlab/dfx/agent/listener/dto/ReceiveMessageDto.java @@ -28,6 +28,7 @@ public class ReceiveMessageDto implements Serializable { private ProcessStatus processStatus; public static enum ProcessStatus { + PROCESS_SEND, PROCESS_RECEIVED, PROCESS_DONE, PROCESS_NOT_POSSIBLE, diff --git a/src/main/java/com/bsmlab/dfx/agent/listener/service/ListenerService.java b/src/main/java/com/bsmlab/dfx/agent/listener/service/ListenerService.java index fbb2499..71ceb19 100644 --- a/src/main/java/com/bsmlab/dfx/agent/listener/service/ListenerService.java +++ b/src/main/java/com/bsmlab/dfx/agent/listener/service/ListenerService.java @@ -48,10 +48,6 @@ public class ListenerService { AckDto ackDto = null; try { ReceiveMessageDto receiveMessageDto = MessageUtils.toReceiveMessageDto(messageJsonString); - log.debug("[todayDebug] receiveMessageDto.getRecipientHostId(): {}", receiveMessageDto.getRecipientHostId()); - log.debug("[todayDebug] receiveMessageDto.getRoutingHostList(): {}", receiveMessageDto.getRoutingHostList()); - log.debug("[todayDebug] receiveMessageDto.getRoutingHostList().get(0).getClass().getName(): {}", receiveMessageDto.getRoutingHostList().get(0).getClass().getName()); - log.debug("[todayDebug] receiveMessageDto.getRoutingHostList().size() - 1: {}", receiveMessageDto.getRoutingHostList().size() - 1); String lastRoutingHostId = receiveMessageDto.getRoutingHostList().get(receiveMessageDto.getRoutingHostList().size() - 1).getHostId(); if(receiveMessageDto.getRecipientHostId().equals(this.agentConfigReader.getAgentConfigDto().getMyHostId()) || lastRoutingHostId.equals(this.agentConfigReader.getAgentConfigDto().getMyHostId())) { if(dropBoxService.isExistToday(receiveMessageDto)) { @@ -63,8 +59,8 @@ public class ListenerService { } } else { - MessageUtils.transfer(this.agentConfigReader, receiveMessageDto); - ackDto = AckDto.builder().result(AckDto.ResultType.RECEIVE_SUCCESS).build(); + AckDto transfarAckDto = MessageUtils.transfer(this.agentConfigReader, receiveMessageDto); + ackDto = AckDto.builder().result(transfarAckDto.getResult()).build(); } } catch (IllegalMessageException | NullMessageException | InCompleteMessageException | JsonProcessingException e) { log.error("{}", e, e); diff --git a/src/main/java/com/bsmlab/dfx/agent/support/MessageUtils.java b/src/main/java/com/bsmlab/dfx/agent/support/MessageUtils.java index 2d36538..a8de12e 100644 --- a/src/main/java/com/bsmlab/dfx/agent/support/MessageUtils.java +++ b/src/main/java/com/bsmlab/dfx/agent/support/MessageUtils.java @@ -61,6 +61,16 @@ public class MessageUtils { throw new InCompleteMessageException("senderTimestamp 값의 형식이 숫자형식이 아닙니다. " + senderTimeStampString); } } + String senderPostmanId; + if(map.get("senderPostmanId") == null) { + throw new InCompleteMessageException("senderPostmanId 엘리먼트를 찾을 수 없습니다."); + } + else if(StringUtils.isBlank(String.valueOf(map.get("senderPostmanId")))) { + throw new InCompleteMessageException("senderPostmanId 값을 찾을 수 없습니다."); + } + else { + senderPostmanId = String.valueOf(map.get("senderPostmanId")); + } String messageUuid; if(map.get("messageUuid") == null) { throw new InCompleteMessageException("messageUuid 엘리먼트를 찾을 수 없습니다."); @@ -131,8 +141,6 @@ public class MessageUtils { throw new InCompleteMessageException("routingHostList 엘리먼트를 찾을 수 없습니다."); } else { - log.debug("[todayDebug] map.get(\"routingHostList\").getClass().getName(): {}", map.get("routingHostList").getClass().getName()); - log.debug("[todayDebug] ((List) map.get(\"routingHostList\")).get(0).getClass().getName(): {}", ((List) map.get("routingHostList")).get(0).getClass().getName()); List> mapList = (List>) map.get("routingHostList"); routingHostList = new ArrayList<>(); for(Map map1 : mapList) { @@ -150,12 +158,22 @@ public class MessageUtils { else { dataString = String.valueOf(map.get("data")); } + ReceiveMessageDto.ProcessStatus processStatus; + if(map.get("processStatus") == null) { + throw new InCompleteMessageException("processStatus 엘리먼트를 찾을 수 없습니다."); + } + else if(StringUtils.isBlank(String.valueOf(map.get("processStatus")))) { + throw new InCompleteMessageException("processStatus 값을 찾을 수 없습니다."); + } + else { + processStatus = EnumUtils.getEnum(ReceiveMessageDto.ProcessStatus.class, String.valueOf(map.get("processStatus"))); + } receiveMessageDto = ReceiveMessageDto.builder() - .senderHostId(senderHostId).senderTimestamp(senderTimestamp) + .senderHostId(senderHostId).senderTimestamp(senderTimestamp).senderPostmanId(senderPostmanId) .messageUuid(messageUuid).messageType(messageType).receivedTimestamp(receivedTimestamp) .recipientHostId(recipientHostId).recipientDropBoxId(recipientDropBoxId) .routingHostList(routingHostList) - .data(dataString).attachFileList(new ArrayList<>()).processStatus(ReceiveMessageDto.ProcessStatus.PROCESS_RECEIVED) + .data(dataString).attachFileList(new ArrayList<>()).processStatus(processStatus) .build(); } catch(JsonProcessingException e) { diff --git a/src/main/java/com/bsmlab/dfx/agent/task/postman/PostmanSchedulerService.java b/src/main/java/com/bsmlab/dfx/agent/task/postman/PostmanSchedulerService.java index 4c11aaf..02fde64 100644 --- a/src/main/java/com/bsmlab/dfx/agent/task/postman/PostmanSchedulerService.java +++ b/src/main/java/com/bsmlab/dfx/agent/task/postman/PostmanSchedulerService.java @@ -95,22 +95,25 @@ public class PostmanSchedulerService { .senderPostmanId(postman.getPostmanId()).messageUuid(messageUuid).messageType(AgentConfigDto.MessageType.TRANSFER_DB_TO_DB) .recipientHostId(postman.getRecipientHostId()).recipientDropBoxId(postman.getRecipientDropBoxId()) .routingHostList(routingHostList) - .data(dataString).build(); + .data(dataString).processStatus(ReceiveMessageDto.ProcessStatus.PROCESS_SEND).build(); log.debug("postman to {} send a message UUID {} (data count: {})", receiveMessageDto.getRecipientHostId(), receiveMessageDto.getMessageUuid(), dataMapList.size()); AckDto ackDto = MessageUtils.send(this.agentConfigReader, postman.getPostmanId(), receiveMessageDto); log.debug("postman received ack from {} ack: {}", receiveMessageDto.getRecipientHostId(), ackDto); - if(AckDto.ResultType.RECEIVE_SUCCESS != ackDto.getResult()) { - log.warn("대상 agent {}[{}]에게 전송하였으나 상대방이 수신하지 못하였습니다. 응답: {} 응답메시지: {}" - , knownAgent.getHostId(), knownAgent.getHostName(), ackDto.getResult(), ackDto.getResultText()); - } - else { + if(ackDto.getResult() == AckDto.ResultType.RECEIVE_SUCCESS) { + receiveMessageDto.setProcessStatus(ReceiveMessageDto.ProcessStatus.PROCESS_RECEIVED); + receiveMessageDto.setReceivedTimestamp(System.currentTimeMillis()); String postProcessingSqlId = postman.getMessage().getPostProcessingSqlId(); sqlExecuteService.update(dataSourceId, postProcessingSqlId, new HashMap()); } - if(agentConfigReader.isConnectedConsole()) { - ReceiveMessageDto.ProcessStatus processStatus = AckDto.ResultType.RECEIVE_SUCCESS == ackDto.getResult() ? ReceiveMessageDto.ProcessStatus.PROCESS_RECEIVED : ReceiveMessageDto.ProcessStatus.PROCESS_FAIL; - receiveMessageDto.setProcessStatus(processStatus); + else if(ackDto.getResult() == AckDto.ResultType.TRANSFER_SUCCESS) { receiveMessageDto.setReceivedTimestamp(System.currentTimeMillis()); + receiveMessageDto.setProcessStatus(ReceiveMessageDto.ProcessStatus.PROCESS_SEND); + } + else if(ackDto.getResult() == AckDto.ResultType.RECEIVE_FAIL || ackDto.getResult() == AckDto.ResultType.TRANSFER_FAIL) { + log.warn("대상 agent {}[{}]에게 전송하였으나 상대방이 수신하지 못하였습니다. 응답: {} 응답메시지: {}", knownAgent.getHostId(), knownAgent.getHostName(), ackDto.getResult(), ackDto.getResultText()); + receiveMessageDto.setProcessStatus(ReceiveMessageDto.ProcessStatus.PROCESS_FAIL); + } + if(agentConfigReader.isConnectedConsole()) { MessageUtils.announceMessageHistory(this.agentConfigReader, receiveMessageDto); } }